Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1014494
  • 博文数量: 327
  • 博客积分: 9995
  • 博客等级: 中将
  • 技术积分: 4319
  • 用 户 组: 普通用户
  • 注册时间: 2009-05-25 11:21
文章存档

2011年(31)

2010年(139)

2009年(157)

我的朋友

分类: LINUX

2010-02-13 17:46:59

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) |
给主人留下些什么吧!~~