黑客基础知识(3)

时间:2026-01-19

很棒

检查所调用的堆栈内容的复杂命令。下表列出了

你在用 gdb 调试时会用到的一些命令。

命令 描 述

file 装入想要调试的可执行文件

kill 终止正在调试的程序

list 列出产生执行文件的源代码的一部分

next 执行一行源代码但不进入函数内部

step 执行一行源代码而且进入函数内部

run 执行当前被调试的程序

quit 终止 gdb

watch 使你能监视一个变量的值而不管它何时被改变

break 在代码里设置断点, 这将使程序执行到这里时被挂起

make 使你能不退出 gdb 就可以重新产生可执行文件

shell 使你能不离开 gdb 就执行 UNIX shell 命令

gdb 应用举例

下面列出了将被调试的程序,这个程序被称为 greeting ,显示一个简单的问候, 再用反序将它列出



#include < stdio.h>

main ()

{

char my_string[] = “hello there”;

my_print (my_string);

my_print2 (my_string);

}

void my_print (char *string)

{

printf (“The string is %s”, string);

}

void my_print2 (char *string)

{

char *string2;

int size, i;

size = strlen (string);

string2 = (char *) malloc (size + 1);

for (i = 0; i < size; i++)

string2[size - i] = string[i];

&nbs
p; string2[size+1] = `0';

printf (“The string printed backward is %s”, string2);

}

用下面的命令编译这个程序:

gcc -o -g test test.c

运行编译好的程序,显示如下:

The string is hello there

The string printed backward is

输出的第一行是正确的, 但第二行打印出的东西并不是我们所期望的。我们所设想的输出应该是:

The string printed backward is ereht olleh

由于某些原因, my_print2 函数没有正常工作。用 gdb 看看问题究竟出在哪儿, 先键入如下命令:

gdb greeting

如果在输入命令时忘了把要调试的程序作为参数传给 gdb ,可以在 gdb 提示符下用 file 命令来载

入它:

(gdb) file greeting

这个命令载入 greeting 可执行文件,就象在 gdb 命令行里指定启动gdb装入它一样。

这时就能用 gdb 的 run 命令来运行 greeting 了。 当它在 gdb 里被运行后结果大约会象这样:

(gdb) run

Starting program: /root/greeting

The string is hello there

The string printed backward is


Program exited with code 041

这个输出和在 gdb 外面运行的结果一样。问题是, 为什么反序打印没有工作? 为了找出症结所在,

我们可以在 my_print2 函数的 for

语句后设一个断点, 具体的做法是在 gdb 提示符下键入 list

黑客基础知识(3).doc 将本文的Word文档下载到电脑

精彩图片

热门精选

大家正在看

× 游客快捷下载通道(下载后可以自由复制和排版)

限时特价:4.9 元/份 原价:20元

支付方式:

开通VIP包月会员 特价:19元/月

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219