1.如果需要读取硬盘的分区表;然而在linux只需一个命令就可以了:
dd if =/dev/hda of=/tmp/mbr bs=512 count=1
运行完成后,文件/tmp/mbr是硬盘主引导记录,为512字节,前446是OS代码,后64字节包含分区表信息,最后2字节标识是MBR. 然后用od命令就可以查看/tmp/mbr文件是第447到510字节的内容了,它就是分区表的内容。
2.你喜欢在C语言程序吗?我们就来一个吧用vi来编辑一个叫test_malloc.c的文件,内容如下:
#include
int main()
{
int *ptr = NULL;
ptr = (int *)malloc(sizeof(int));
*ptr = 5;
free(ptr);
return 0;
}
你想知道它生成对应的汇编吗?
gcc -S test_malloc.c <---这个命令从test_malloc.c生成对应的汇编文件test_malloc.s
cat test_malloc.s <--汇编如下,这个中AT&T格式的编程,而不是我们所学的Masm格式,但对应的指令都一样的!
cat test_malloc.s
.file "test_malloc.c"
.text
.globl main
.type main, @function
main:
leal 4(%esp), %ecx
andl $-16, %esp
pushl -4(%ecx)
pushl %ebp
movl %esp, %ebp
pushl %ecx
subl $20, %esp
movl $0, -8(%ebp)
movl $4, (%esp)
call malloc
movl %eax, -8(%ebp)
movl -8(%ebp), %eax
movl $5, (%eax)
movl -8(%ebp), %eax
movl %eax, (%esp)
call free
movl $0, %eax
addl $20, %esp
popl %ecx
popl %ebp
leal -4(%ecx), %esp
ret
.size main, .-main
.ident "GCC: (GNU) 4.1.2 (Ubuntu 4.1.2-0ubuntu4)"
.section .note.GNU-stack,"",@progbits
看了上面的代码,你会担心,如果malloc函数不成功(返回NULL)会如何呢?或许无论你运行多少次,可能找不到上面malloc返回NULL的情况!
你想知道上面返回NULL后出现什么情况吗? Linux下有一个优秀的调试器可以帮你模拟这些情况的出现。让我们来看看吧。
1).先生成一个可调试文件
gcc -Wall -g -o test_malloc test_malloc.c
2). 使用gdb进行调试
gdb ./test_malloc -q
Using host libthread_db library "/lib/tls/i686/cmov/libthread_db.so.1".
(gdb) l <---这个是list命令的缩写,用于边调试边查看源代码
1 #include
2
3 int main()
4 {
5 int *ptr = NULL;
6
7 ptr = (int *)malloc(sizeof(int));
8 *ptr = 5;
9
10 free(ptr);
(gdb) l <-------同上
11
12 return 0;
13 }
(gdb) break main <-----在main函上设置断点,当执行到main函数时会停止
Breakpoint 1 at 0x80483c5: file test_malloc.c, line 5.
(gdb) r <-----先让程序运行起来
Starting program: /home/ylin/program/c/test/test_malloc
Breakpoint 1, main () at test_malloc.c:5 <------系统提示,执行到main断点了
5 int *ptr = NULL;
(gdb) n <------next命令的缩写,单步执行,即执行int *ptr = NULL;这个语句, ptr = (int *)malloc(sizeof(int));下一条要执行的句
7 ptr = (int *)malloc(sizeof(int));
(gdb) n <-----单步执行
8 *ptr = 5;
(gdb) print ptr <------查看ptr的值,以及它指向的内存单元
$1 = (int *) 0x804a008
(gdb) call free(ptr) <------在调试器中调用库函数free
$2 = 0
(gdb) set var ptr = 0 <------设置变量ptr的值为NULL,这两步是模拟malloc函数返回NULL的情况
(gdb) n <------单步执行
Program received signal SIGSEGV, Segmentation fault. <-----调试器提示:程序访问非法内容,这里是访问为0内容,在linux里非法访存会产生一个SIGSEGV信号。
0x080483de in main () at test_malloc.c:8
8 *ptr = 5;
(gdb) <---由于非法访存,程序运行结束了
3.定时关机
当你正在运行一些重要程序还未结束时,不巧你有急事要走开。那linux的关机程序可以帮你完成定时关机的任务,让你放心去做更重要的事情,用法相当简单:
1)Shutdown –h 12:30
2)shutdown –h +30
3)shutdown –h now
1.是把关机时间定在12:30
2.是把关机时间定在30分钟之后
3.是马上关机,显然这不是定时关机,不过你可以试一下这种关机方式
4.批量运行任务
你身边有没有同学(事)或朋友在写php/jsp/asp的数据库应用程呢?有的话,你可以和他开个小小的玩笑,让他的IIS/tomcat/apache工作失效。在Linux的世界里,这是最容易不过的事情了。假设你朋友的机器IP为192.168.1.1, web服务的端口为80, 访问数据库量最大的网页是sreach.jsp。这样我们采用一个称为wget的小工具就可以。输入下面的命令:
While [ 1 ]; do wget ; done
这样就可以不停地向他的机器访问sreach.jsp网页了,如果他机器性很好,那么你就要加多力量,让wget并行起来。与上面的命令类,只不过复杂了点:
for I in `seq 1 1000`; do (while [ 1]; do wget ; done)& done
这就可以并发1000个用户来访问该面页,并且每个用户都是不停地访问的。
如果对上面的用法产生兴趣,那linux正是可以为你提供优质服务的操作系统。
阅读(805) | 评论(0) | 转发(1) |