Mar 23, 2010
有时候使用rm命令的时候觉得有个删除提示比较保险;但真的加上了,
在使用的大多数时候又觉得比较麻烦。这其实可通过rm的-i选项来控制的.
以下是用rm –help命令查出来的
用法:rm [选项]… 文件…
删除 (unlink) 文件。
-f, –force 强制删除。忽略不存在的文件,不提示确认
-i 在删除前需要确认
-I 在删除超过三个文件或者递归删除前要求确认。此选项比-i 提
示内容更少,但同样可以阻止大多数错误发生
–interactive[=WHEN] 根据指定的WHEN 进行确认提示:never,once (-I),
或者always (-i)。如果此参数不加WHEN 则总是提示
–one-file-system 递归删除一个层级时,跳过所有不符合命令行参
数的文件系统上的文件
[...]
Mar 23, 2010
asmlinkage long sys_nice(int increment)
“asmlinkage” 是在 i386 system call 实作中相当重要的一个 gcc 标签(tag)。
当 system call handler 要呼叫相对应的 system call routine 时,便将一般用途暂存器的值 push 到 stack 里,因此 system call routine 就要由 stack 来读取 system call handler 传递的参数。这就是 asmlinkage 标签的用意。
system call handler 是 assembly code,system call routine(例如:sys_nice)是 C code,当 assembly code 呼叫 C function,并且是以 stack 方式传参数(parameter)时,在 C [...]
Mar 23, 2010
背景
项目的 自动化测试中已经使用了基于Python 脚本的框架,自动化过程中最关键的问题就是如何实现桩模块。运用 Python 强大的功能,实现任何桩模块都是可能的,但是是否必须完全使用 Python 实现模块逻辑,成本是一个决定性因素。在桩模块逻辑简单的情况下,使用 Python 模拟模块逻辑不但使自动化测试的结构清晰,也具有更好的灵活性,但是如果桩模块逻辑复杂,实现起来可能要耗费很大的成本,也容易由于桩模块逻辑与实际不符导致测试结果不可信。在这种情况下,如果能够借用 RD 开发的某些代码段 / 库,将会对测试自动化带来很多效益。
另外,在Python 中调用 C/C++ 代码的方法也可能应用于 C/C++ 库的测试中,这种测试方法的可行性还有待研究。
以下总结出几种在Python 中调用 C/C++ 代码的方法
使用ctypes 模块调用 C 动态库
从Python2.5 开始, Python 开始提供 ctypes 模块来提供对 C 语言编译的动态库文件的调用。注意, 这里特指C 的动态库 ,用C++ 编译的动态库 ctypes 虽然能够加载,但调用时的函数名已经由于 C++ 的重载特性被加以修改,难以调用。 使用 ctypes 调用 C 动态库的好处在于不用进行额外的开发,可以直接使用编译好的动态库。 ctypes 提供了完整的 C 类型封装,也支持自定义类型,大大减少在调用过程中的工作量。 ctypes 的使用很简单,只需熟悉 python 封装与 C [...]
Mar 22, 2010
/***********************************************************
* hoagie_udp_sendmsg.c
* LOCAL LINUX KERNEL ROOT EXPLOIT (< 2.6.19) - CVE-2009-2698
*
* udp_sendmsg bug exploit via (*output) callback function
* used in dst_entry / rtable
*
* Bug reported by Tavis Ormandy and Julien Tinnes
* of the Google Security Team
*
* Tested with Debian Etch (r0)
*
* $ cat [...]
Mar 22, 2010
前段时间,爆出一个linux用户提升普通用户权限到root权限的漏洞,很多小白开始试了,进ssh,然后./a,咋什么都没有呢?殊不知,哪有这么简单,还是需要代码的。。本文的末尾提供了代码(代码版权归原作者所有:p0c73n1(at)gmail(dot)com),也提供了编译后的执行程序。gcc版本是gcc (GCC) 4.1.1 20070105。还要注意,此漏洞需要在Linux kernel 2.6 < 2.6.19 (32bit)下才能测试通过,目前还没有好的补救办法。
国内极少数有主机商提供ssh登入权限,所以,机会不多,但是国外有很多都提供,例如DreamHost等等。。如果空间没有使用gcc的权限,可以找对应版本的gcc编译之后,ftp上去亦可。。编译命令是: gcc -o t t.c,然后执行/path/to/t 即可。。如:
[leekooqi@icnote ~]$ gcc -o t t.c
[leekooqi@icnote ~]$ ./t
sh-3.1# id
uid=0(root) gid=0(root) groups=512(leekooqi)
sh-3.1#
你会发现,你已经拥有root权限了,可以为所欲为了。。但是,记住,不要干坏事!!
原文件如下:
1./*
2.**
3.** 0×82-CVE-2009-2698
4.** Linux kernel 2.6 < 2.6.19 (32bit) ip_append_data() local ring0 root exploit
5.**
6.** Tested White Box 4(2.6.9-5.ELsmp),
7.** CentOS 4.4(2.6.9-42.ELsmp), CentOS 4.5(2.6.9-55.ELsmp),
8.** Fedora Core [...]
Mar 12, 2010
在php内部字符串可以使用单引号引起来,也可以使用双引号引起来。(当
然还有第三种方式在此不做说明了)
它们的作用和效率是不同的,对于双引号的字符串,其内部的变量会被
变量对应的值代替,但单引号就不同了。
例:
$var = ‘hello’;
$greeting = “$var world”;
echo $greeting;
那么会得到hello world
如果$greeting的值改成:’$var world’,那么执行结果会变成如下了:
$var world
由此我们可以看出,有时候我们必须使用双引号,才能达到我们的一个
预期目的。
但是,从效率上讲,双引号的字符串是会带来额外的消耗的,其原因我
想就不用解释了吧。
下面再给大家讲一个小的诡异的点吧。
printf(’hello %s\n’, ‘world’);
printf(”hello %s\n”, ‘world’);
printf(’hello %s\n’, “world”);
printf(”hello %s\n”, “world”);
有什么不同,读者自已思考一下吧:)
多谢
张久安
If you enjoyed this post, make sure you subscribe to my RSS feed!
Mar 12, 2010
为了说明问题,我们看如下三个php文件:
//file: functions.php
require_once(’my_once.php’);
require_once(’my_once.php’);
function test()
{
require_once(’my_unonce.php’);
//require(’my_unonce.php’);
}
test();
test();
//file:my_once.php
printf(”%s\n”, ‘my_once’);
//file: my_unonce.php
printf(”%s\n”, ‘my_unonce’);
好,现在我们做一下测试:
php functions.php
输出结果如下:
my_once
my_unonce
这与我们期望的结果是不一致的,因为我们期望调用两次test函数,
即让test做两遍事情,但事实上只做了一次。
我们对functions.php改一下,require_once改成require(函数内部)
//file: functions.php
require_once(’my_once.php’);
require_once(’my_once.php’);
function test()
{
//require_once(’my_unonce.php’);
require(’my_unonce.php’);
}
test();
test();
再试一下,输出结果如下:
my_once
my_unonce
my_unonce
正是我们期望的结果。
时常听人说,即然有了require_once就不要再使require了,实不正
确的,各有各的用处点吧。
另外需要说明的是,实际效率也是不同的,require要比require_once快
好多。
多谢
张久安
If you enjoyed this post, make sure you subscribe to my RSS feed!
Mar 11, 2010
在面试过程中,我时常会问一道简单的题目:
请找出如下程序不妥之处:
void s_c(const char *s, const char *p)
{
while (*s) {
*p = *s;
}
}
首先,这道简单的题目考察的是找错能力,比如结束符和const的应用。
其次,考察的是接口设计能力,这也是重点。
没有返回值,因此对于一些异常现象不好对外表现,const是否应用正确,
函数名使用是否见其名知其意,函数参数是否见其名知其意,有没有对接
口的简述,指针,引用,就量传递使用是否正确等等。
比如改成如下:
/**
* brief: 拷贝字符串,从源串到目的串
* param[in]: src 源串地址
* param[out]: dest 目的串地址
* return: 成功 0
* 失败 错误码
[...]
Mar 11, 2010
一次偶然的机会,发现发一段程序感觉诡异,于是详细查了一把文档。
原程序如下:
class os_cart {
public function pay() {
//do something
}
….
}
os_cart::pay();
即然成员函数声明的不是static的,为什么可以使用静态模式来调用呢?这样
为什么不会报错呢?查了一下文档,原来和error_reporting函数相关。如果
error_reporting的设置包含了E_STRICT的话,那么程序会进行严格的检查,
对于非静态函数进行静态方式调用,就会报错。如果将E_STRICT错误过滤掉
的话,就不会报错了。
error_reporting的设置方式:
1 在php.ini配置文件中进行配置,相关值如下列表:
value
constant
1
E_ERROR
2
E_WARNING
4
E_PARSE
8
E_NOTICE
16
E_CORE_ERROR
32
E_CORE_WARNING
64
E_COMPILE_ERROR
128
E_COMPILE_WARNING
256
E_USER_ERROR
512
E_USER_WARNING
1024
E_USER_NOTICE
2047
E_ALL
2048
E_STRICT
2 在程序中进行设置,在程序入口处使用error_reporting函数进行设置
如 error_reporting(E_ALL | E_STRICT);这里需要说明的是,E_ALL并
不包含E_STRICT。
多谢
张久安
If you enjoyed this post, make sure you subscribe to my RSS feed!
Mar 10, 2010
TIOBE网站发布了最新的三月份编程语言排名,本月排名情况和上月相比并无显著变化。
比较有意思的是,Objective-C是上升势头最明显的编程语言,而Google推出的Go则经历了诞生后的首次略微下滑。此外,Fortran取代Lisp/Scheme挺进前20;Matlab则上升6位,接近成为主流编程语言。
Matlab是矩阵实验室(Matrix Laboratory)的简称,是美国MathWorks公司出品的商业数学软件,广泛用于科学计算,也可以用于算法开发、数据可视化、数据分析,是一种高级技术计算语言和交互式环境的组合,主要包括Matlab和Simulink两大部分。
与之前的排名相比,20到30名的名次变化较多,显示这些语言总体上都在伯仲之间。
按TIOBE自己的说明,TIOBE编程语言社区排行榜是编程语言流行趋势的一个指标。每月更新。这份排行榜排名基于互联网上有经验的程序员、课程和第三方厂商的数量。排名使用著名的搜索引擎(诸如Google、 MSN 、雅虎)以及Wikipedia和YouTube进行计算。请注意这个排行榜只是反映某个编程语言的热门程度,并不能说明一门编程语言好不好,或者一门语言所编写的代码数量多少。
这个排行榜可以用来考查你的编程技能是否与时俱进,也可以在开始开发新系统时选择语言时用来进行策略性的决策。排行榜的详细定义可以参考这里。
需要特别注意的是,这个排名并不反映国内编程语言的现状,相对国内,它往往显得比较超前,但它代表的趋势很有参考意义。
If you enjoyed this post, make sure you subscribe to my RSS feed!