GDB调试汇编堆栈过程分析

GDB调试汇编堆栈

准备工作

· 终端编译工具:

·         编译64位Linux版本32位的二进制文件,需要安装一个库,使用指令sudo apt-get install libc6-dev-i386

分析过程

·         1.生成汇编代码:gcc -g test.c -o test -m32

·         2.调试:gdb test

·        

·         3.设置断点,因为目的是分析而不是调试bug,所以我们将断点设置在main函数

·        

·         4.开始gdb调试:r(un),如若想获取此时的汇编代码,可用指令:disassemble

·        

· 5.此时可以用指令查看寄存器的值:i(nfo) r(egisters),显示的格式为3列:

·

·        

1列:寄存器名称

·         第2列:寄存器的地址

·         第3列:寄存器中存的值  

· 6:结合display命令和寄存器或pc内部变量,做如下设置:display /i $pc,这样在每次执行下一条汇编语句时,都会显示出当前执行的语句。下面展示每一步时%esp、%ebp和堆栈内容的变化:

·         

过程(截图中的指令实际上是待执行指令)

· 初始

·          

· push $0x1

·  

 

·  

· call 0x804840d  call调用f(0x804840d)

 

· push %ebp  执行f函数,f初始化帧指针,将上一个函数的基址入栈,将当前%esp作为新基址

 

·  mov %esp,%ebp  分配栈空间,为传参做准备

· 

· pushl 0x8(%ebp)   将%esp中的8存入栈中

·          

· call 0x80483db  call调用g(0x80483db)

·     

· push %ebp  初始化栈指针·     

 

· mov %esp,%ebp  分配栈空间

·          

· mov 0x8(%ebp),%eax  将8存入栈

· pop %ebp  %ebp在结束前弹栈

·          

· ret   返回调用位置,结束函数

·          

· add $0x4,%esp    将 %esp 与立即数 4 相加

·          

· leave   返回准备栈

·          

· ret  返回调用位置,结束函数

·          

· add $0x4,%esp  将 %esp 与立即数 4 相加

·          

· add $0x1,%eax  将 %eax 与立即数 1 相加

 

 

附上完整调试过程

jclemo@ubuntu:~/Desktop/GDB_test$ gcc -g test.c -o test -m32
jclemo@ubuntu:~/Desktop/GDB_test$ ls
test  test.c
jclemo@ubuntu:~/Desktop/GDB_test$ gdb test
GNU gdb (Ubuntu 7.11-0ubuntu1) 7.11
Copyright (C) 2016 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from test...done.
(gdb) b test.c:main
Breakpoint 1 at 0x804840b: file test.c, line 19.
(gdb) run
Starting program: /home/jclemo/Desktop/GDB_test/test

Breakpoint 1, main () at test.c:19
19  return f(8) + addend3;
(gdb) disassemble
Dump of assembler code for function main:
   0x08048408 <+0>: push   %ebp
   0x08048409 <+1>: mov    %esp,%ebp
=> 0x0804840b <+3>: push   $0x8
   0x0804840d <+5>: call   0x80483ef <f>
   0x08048412 <+10>: add    $0x4,%esp
   0x08048415 <+13>: mov    $0x3,%edx
   0x0804841a <+18>: add    %edx,%eax
   0x0804841c <+20>: leave 
   0x0804841d <+21>: ret   
End of assembler dump.
(gdb) i r
eax            0xf7fbbdbc -134496836
ecx            0xaed89f2 183339506
edx            0xffffd0b4 -12108
ebx            0x0 0
esp            0xffffd088 0xffffd088
ebp            0xffffd088 0xffffd088
esi            0xf7fba000 -134504448
edi            0xf7fba000 -134504448
eip            0x804840b 0x804840b <main+3>
eflags         0x296 [ PF AF SF IF ]
cs             0x23 35
ss             0x2b 43
ds             0x2b 43
es             0x2b 43
fs             0x0 0
gs             0x63 99
(gdb) x 0xffffd088
0xffffd088: 0x00000000
(gdb) display /i $pc
1: x/i $pc
=> 0x804840b <main+3>: push   $0x8
(gdb) si
0x0804840d 19  return f(8) + addend3;
1: x/i $pc
=> 0x804840d <main+5>: call   0x80483ef <f>
(gdb) i r
eax            0xf7fbbdbc -134496836
ecx            0xaed89f2 183339506
edx            0xffffd0b4 -12108
ebx            0x0 0
esp            0xffffd084 0xffffd084
ebp            0xffffd088 0xffffd088
esi            0xf7fba000 -134504448
edi            0xf7fba000 -134504448
eip            0x804840d 0x804840d <main+5>
eflags         0x296 [ PF AF SF IF ]
cs             0x23 35
ss             0x2b 43
ds             0x2b 43
es             0x2b 43
fs             0x0 0
gs             0x63 99
(gdb) x /2a 0xffffd084
0xffffd084: 0x8 0x0
(gdb) si
f (x=8) at test.c:13
13 {
1: x/i $pc
=> 0x80483ef <f>: push   %ebp
(gdb) i r
eax            0xf7fbbdbc -134496836
ecx            0xaed89f2 183339506
edx            0xffffd0b4 -12108
ebx            0x0 0
esp            0xffffd080 0xffffd080
ebp            0xffffd088 0xffffd088
esi            0xf7fba000 -134504448
edi            0xf7fba000 -134504448
eip            0x80483ef 0x80483ef <f>
eflags         0x296 [ PF AF SF IF ]
cs             0x23 35
ss             0x2b 43
ds             0x2b 43
es             0x2b 43
fs             0x0 0
gs             0x63 99
(gdb) x /3a 0xffffd080
0xffffd080: 0x8048412 <main+10> 0x8 0x0
(gdb) si
0x080483f0 13 {
1: x/i $pc
=> 0x80483f0 <f+1>: mov    %esp,%ebp
(gdb) i r
eax            0xf7fbbdbc -134496836
ecx            0xaed89f2 183339506
edx            0xffffd0b4 -12108
ebx            0x0 0
esp            0xffffd07c 0xffffd07c
ebp            0xffffd088 0xffffd088
esi            0xf7fba000 -134504448
edi            0xf7fba000 -134504448
eip            0x80483f0 0x80483f0 <f+1>
eflags         0x296 [ PF AF SF IF ]
cs             0x23 35
ss             0x2b 43
ds             0x2b 43
es             0x2b 43
fs             0x0 0
gs             0x63 99
(gdb) x /4a 0xffffd07c
0xffffd07c: 0xffffd088 0x8048412 <main+10> 0x8 0x0
(gdb) si
14  return g(x + addend2);
1: x/i $pc
=> 0x80483f2 <f+3>: mov    0x804a01c,%edx
(gdb) i r
eax            0xf7fbbdbc -134496836
ecx            0xaed89f2 183339506
edx            0xffffd0b4 -12108
ebx            0x0 0
esp            0xffffd07c 0xffffd07c
ebp            0xffffd07c 0xffffd07c
esi            0xf7fba000 -134504448
edi            0xf7fba000 -134504448
eip            0x80483f2 0x80483f2 <f+3>
eflags         0x296 [ PF AF SF IF ]
cs             0x23 35
ss             0x2b 43
ds             0x2b 43
es             0x2b 43
fs             0x0 0
gs             0x63 99
(gdb) x /5a 0xffffd07c
0xffffd07c: 0xffffd088 0x8048412 <main+10> 0x8 0x0
0xffffd08c: 0xf7e22637
(gdb) si
0x080483f8 14  return g(x + addend2);
1: x/i $pc
=> 0x80483f8 <f+9>: mov    0x8(%ebp),%eax
(gdb) i r
eax            0xf7fbbdbc -134496836
ecx            0xaed89f2 183339506
edx            0x2 2
ebx            0x0 0
esp            0xffffd07c 0xffffd07c
ebp            0xffffd07c 0xffffd07c
esi            0xf7fba000 -134504448
edi            0xf7fba000 -134504448
eip            0x80483f8 0x80483f8 <f+9>
eflags         0x296 [ PF AF SF IF ]
cs             0x23 35
ss             0x2b 43
ds             0x2b 43
es             0x2b 43
fs             0x0 0
gs             0x63 99
(gdb) x /6a 0xffffd07c
0xffffd07c: 0xffffd088 0x8048412 <main+10> 0x8 0x0
0xffffd08c: 0xf7e22637 0x1
(gdb) si
0x080483fb 14  return g(x + addend2);
1: x/i $pc
=> 0x80483fb <f+12>: add    %edx,%eax
(gdb) i r
eax            0x8 8
ecx            0xaed89f2 183339506
edx            0x2 2
ebx            0x0 0
esp            0xffffd07c 0xffffd07c
ebp            0xffffd07c 0xffffd07c
esi            0xf7fba000 -134504448
edi            0xf7fba000 -134504448
eip            0x80483fb 0x80483fb <f+12>
eflags         0x296 [ PF AF SF IF ]
cs             0x23 35
ss             0x2b 43
ds             0x2b 43
es             0x2b 43
fs             0x0 0
gs             0x63 99
(gdb) x/5a 0xffffd07c
0xffffd07c: 0xffffd088 0x8048412 <main+10> 0x8 0x0
0xffffd08c: 0xf7e22637
(gdb) si
0x080483fd 14  return g(x + addend2);
1: x/i $pc
=> 0x80483fd <f+14>: push   %eax
(gdb) i r
eax            0xa 10
ecx            0xaed89f2 183339506
edx            0x2 2
ebx            0x0 0
esp            0xffffd07c 0xffffd07c
ebp            0xffffd07c 0xffffd07c
esi            0xf7fba000 -134504448
edi            0xf7fba000 -134504448
eip            0x80483fd 0x80483fd <f+14>
eflags         0x206 [ PF IF ]
cs             0x23 35
ss             0x2b 43
ds             0x2b 43
es             0x2b 43
fs             0x0 0
gs             0x63 99
(gdb) x /5a 0xffffd07c
0xffffd07c: 0xffffd088 0x8048412 <main+10> 0x8 0x0
0xffffd08c: 0xf7e22637
(gdb) si
0x080483fe 14  return g(x + addend2);
1: x/i $pc
=> 0x80483fe <f+15>: call   0x80483db <g>
(gdb) i r
eax            0xa 10
ecx            0xaed89f2 183339506
edx            0x2 2
ebx            0x0 0
esp            0xffffd078 0xffffd078
ebp            0xffffd07c 0xffffd07c
esi            0xf7fba000 -134504448
edi            0xf7fba000 -134504448
eip            0x80483fe 0x80483fe <f+15>
eflags         0x206 [ PF IF ]
cs             0x23 35
ss             0x2b 43
ds             0x2b 43
es             0x2b 43
fs             0x0 0
gs             0x63 99
(gdb) x /5a 0xffffd078
0xffffd078: 0xa 0xffffd088 0x8048412 <main+10> 0x8
0xffffd088: 0x0
(gdb) si
g (x=10) at test.c:8
8 {
1: x/i $pc
=> 0x80483db <g>: push   %ebp
(gdb) i r
eax            0xa 10
ecx            0xaed89f2 183339506
edx            0x2 2
ebx            0x0 0
esp            0xffffd074 0xffffd074
ebp            0xffffd07c 0xffffd07c
esi            0xf7fba000 -134504448
edi            0xf7fba000 -134504448
eip            0x80483db 0x80483db <g>
eflags         0x206 [ PF IF ]
cs             0x23 35
ss             0x2b 43
ds             0x2b 43
es             0x2b 43
fs             0x0 0
gs             0x63 99
(gdb) x /5a 0xffffd074
0xffffd074: 0x8048403 <f+20> 0xa 0xffffd088 0x8048412 <main+10>
0xffffd084: 0x8
(gdb) si
0x080483dc 8 {
1: x/i $pc
=> 0x80483dc <g+1>: mov    %esp,%ebp
(gdb) i r
eax            0xa 10
ecx            0xaed89f2 183339506
edx            0x2 2
ebx            0x0 0
esp            0xffffd070 0xffffd070
ebp            0xffffd07c 0xffffd07c
esi            0xf7fba000 -134504448
edi            0xf7fba000 -134504448
eip            0x80483dc 0x80483dc <g+1>
eflags         0x206 [ PF IF ]
cs             0x23 35
ss             0x2b 43
ds             0x2b 43
es             0x2b 43
fs             0x0 0
gs             0x63 99
(gdb) x /5a 0xffffd070
0xffffd070: 0xffffd07c 0x8048403 <f+20> 0xa 0xffffd088
0xffffd080: 0x8048412 <main+10>
(gdb) si
9  return x + addend1;
1: x/i $pc
=> 0x80483de <g+3>: movzwl 0x804a018,%eax
(gdb) i r
eax            0xa 10
ecx            0xaed89f2 183339506
edx            0x2 2
ebx            0x0 0
esp            0xffffd070 0xffffd070
ebp            0xffffd070 0xffffd070
esi            0xf7fba000 -134504448
edi            0xf7fba000 -134504448
eip            0x80483de 0x80483de <g+3>
eflags         0x206 [ PF IF ]
cs             0x23 35
ss             0x2b 43
ds             0x2b 43
es             0x2b 43
fs             0x0 0
gs             0x63 99
(gdb) x /5a 0xffffd070
0xffffd070: 0xffffd07c 0x8048403 <f+20> 0xa 0xffffd088
0xffffd080: 0x8048412 <main+10>
(gdb) si
0x080483e5 9  return x + addend1;
1: x/i $pc
=> 0x80483e5 <g+10>: movswl %ax,%edx
(gdb) i r
eax            0x1 1
ecx            0xaed89f2 183339506
edx            0x2 2
ebx            0x0 0
esp            0xffffd070 0xffffd070
ebp            0xffffd070 0xffffd070
esi            0xf7fba000 -134504448
edi            0xf7fba000 -134504448
eip            0x80483e5 0x80483e5 <g+10>
eflags         0x206 [ PF IF ]
cs             0x23 35
ss             0x2b 43
ds             0x2b 43
es             0x2b 43
fs             0x0 0
gs             0x63 99
(gdb) x /5a 0xffffd070
0xffffd070: 0xffffd07c 0x8048403 <f+20> 0xa 0xffffd088
0xffffd080: 0x8048412 <main+10>
(gdb) si
0x080483e8 9  return x + addend1;
1: x/i $pc
=> 0x80483e8 <g+13>: mov    0x8(%ebp),%eax
(gdb) i r
eax            0x1 1
ecx            0xaed89f2 183339506
edx            0x1 1
ebx            0x0 0
esp            0xffffd070 0xffffd070
ebp            0xffffd070 0xffffd070
esi            0xf7fba000 -134504448
edi            0xf7fba000 -134504448
eip            0x80483e8 0x80483e8 <g+13>
eflags         0x206 [ PF IF ]
cs             0x23 35
ss             0x2b 43
ds             0x2b 43
es             0x2b 43
fs             0x0 0
gs             0x63 99
(gdb) x /5a 0xffffd070
0xffffd070: 0xffffd07c 0x8048403 <f+20> 0xa 0xffffd088
0xffffd080: 0x8048412 <main+10>
(gdb) si
0x080483eb 9  return x + addend1;
1: x/i $pc
=> 0x80483eb <g+16>: add    %edx,%eax
(gdb) i r
eax            0xa 10
ecx            0xaed89f2 183339506
edx            0x1 1
ebx            0x0 0
esp            0xffffd070 0xffffd070
ebp            0xffffd070 0xffffd070
esi            0xf7fba000 -134504448
edi            0xf7fba000 -134504448
eip            0x80483eb 0x80483eb <g+16>
eflags         0x206 [ PF IF ]
cs             0x23 35
ss             0x2b 43
ds             0x2b 43
es             0x2b 43
fs             0x0 0
gs             0x63 99
(gdb) x /5a 0xffffd070
0xffffd070: 0xffffd07c 0x8048403 <f+20> 0xa 0xffffd088
0xffffd080: 0x8048412 <main+10>
(gdb) si
10 } 
1: x/i $pc
=> 0x80483ed <g+18>: pop    %ebp
(gdb) i r
eax            0xb 11
ecx            0xaed89f2 183339506
edx            0x1 1
ebx            0x0 0
esp            0xffffd070 0xffffd070
ebp            0xffffd070 0xffffd070
esi            0xf7fba000 -134504448
edi            0xf7fba000 -134504448
eip            0x80483ed 0x80483ed <g+18>
eflags         0x202 [ IF ]
cs             0x23 35
ss             0x2b 43
ds             0x2b 43
es             0x2b 43
fs             0x0 0
gs             0x63 99
(gdb) x /5a 0xffffd070
0xffffd070: 0xffffd07c 0x8048403 <f+20> 0xa 0xffffd088
0xffffd080: 0x8048412 <main+10>
(gdb) si
0x080483ee 10 } 
1: x/i $pc
=> 0x80483ee <g+19>: ret   
(gdb) i r
eax            0xb 11
ecx            0xaed89f2 183339506
edx            0x1 1
ebx            0x0 0
esp            0xffffd074 0xffffd074
ebp            0xffffd07c 0xffffd07c
esi            0xf7fba000 -134504448
edi            0xf7fba000 -134504448
eip            0x80483ee 0x80483ee <g+19>
eflags         0x202 [ IF ]
cs             0x23 35
ss             0x2b 43
ds             0x2b 43
es             0x2b 43
fs             0x0 0
gs             0x63 99
(gdb) x /5a 0xffffd074
0xffffd074: 0x8048403 <f+20> 0xa 0xffffd088 0x8048412 <main+10>
0xffffd084: 0x8
(gdb) si
0x08048403 in f (x=8) at test.c:14
14  return g(x + addend2);
1: x/i $pc
=> 0x8048403 <f+20>: add    $0x4,%esp
(gdb) i r
eax            0xb 11
ecx            0xaed89f2 183339506
edx            0x1 1
ebx            0x0 0
esp            0xffffd078 0xffffd078
ebp            0xffffd07c 0xffffd07c
esi            0xf7fba000 -134504448
edi            0xf7fba000 -134504448
eip            0x8048403 0x8048403 <f+20>
eflags         0x202 [ IF ]
cs             0x23 35
ss             0x2b 43
ds             0x2b 43
es             0x2b 43
fs             0x0 0
gs             0x63 99
(gdb) x /5a 0xffffd078
0xffffd078: 0xa 0xffffd088 0x8048412 <main+10> 0x8
0xffffd088: 0x0
(gdb) si
15 }
1: x/i $pc
=> 0x8048406 <f+23>: leave 
(gdb) i r
eax            0xb 11
ecx            0xaed89f2 183339506
edx            0x1 1
ebx            0x0 0
esp            0xffffd07c 0xffffd07c
ebp            0xffffd07c 0xffffd07c
esi            0xf7fba000 -134504448
edi            0xf7fba000 -134504448
eip            0x8048406 0x8048406 <f+23>
eflags         0x282 [ SF IF ]
cs             0x23 35
ss             0x2b 43
ds             0x2b 43
es             0x2b 43
fs             0x0 0
gs             0x63 99
(gdb) x /5a 0xffffd07c
0xffffd07c: 0xffffd088 0x8048412 <main+10> 0x8 0x0
0xffffd08c: 0xf7e22637
(gdb) si
0x08048407 15 }
1: x/i $pc
=> 0x8048407 <f+24>: ret   
(gdb) i r
eax            0xb 11
ecx            0xaed89f2 183339506
edx            0x1 1
ebx            0x0 0
esp            0xffffd080 0xffffd080
ebp            0xffffd088 0xffffd088
esi            0xf7fba000 -134504448
edi            0xf7fba000 -134504448
eip            0x8048407 0x8048407 <f+24>
eflags         0x282 [ SF IF ]
cs             0x23 35
ss             0x2b 43
ds             0x2b 43
es             0x2b 43
fs             0x0 0
gs             0x63 99
(gdb) x /5a 0xffffd080
0xffffd080: 0x8048412 <main+10> 0x8 0x0 0xf7e22637
0xffffd090: 0x1
(gdb) si
0x08048412 in main () at test.c:19
19  return f(8) + addend3;
1: x/i $pc
=> 0x8048412 <main+10>: add    $0x4,%esp
(gdb) i r
eax            0xb 11
ecx            0xaed89f2 183339506
edx            0x1 1
ebx            0x0 0
esp            0xffffd084 0xffffd084
ebp            0xffffd088 0xffffd088
esi            0xf7fba000 -134504448
edi            0xf7fba000 -134504448
eip            0x8048412 0x8048412 <main+10>
eflags         0x282 [ SF IF ]
cs             0x23 35
ss             0x2b 43
ds             0x2b 43
es             0x2b 43
fs             0x0 0
gs             0x63 99
(gdb) x /5a 0xffffd084
0xffffd084: 0x8 0x0 0xf7e22637 0x1
0xffffd094: 0xffffd124
(gdb) si
0x08048415 19  return f(8) + addend3;
1: x/i $pc
=> 0x8048415 <main+13>: mov    $0x3,%edx
(gdb) i r
eax            0xb 11
ecx            0xaed89f2 183339506
edx            0x1 1
ebx            0x0 0
esp            0xffffd088 0xffffd088
ebp            0xffffd088 0xffffd088
esi            0xf7fba000 -134504448
edi            0xf7fba000 -134504448
eip            0x8048415 0x8048415 <main+13>
eflags         0x286 [ PF SF IF ]
cs             0x23 35
ss             0x2b 43
ds             0x2b 43
es             0x2b 43
fs             0x0 0
gs             0x63 99
(gdb) x /5a 0xffffd088
0xffffd088: 0x0 0xf7e22637 0x1 0xffffd124
0xffffd098: 0xffffd12c
(gdb) si
0x0804841a 19  return f(8) + addend3;
1: x/i $pc
=> 0x804841a <main+18>: add    %edx,%eax
(gdb) i r
eax            0xb 11
ecx            0xaed89f2 183339506
edx            0x3 3
ebx            0x0 0
esp            0xffffd088 0xffffd088
ebp            0xffffd088 0xffffd088
esi            0xf7fba000 -134504448
edi            0xf7fba000 -134504448
eip            0x804841a 0x804841a <main+18>
eflags         0x286 [ PF SF IF ]
cs             0x23 35
ss             0x2b 43
ds             0x2b 43
es             0x2b 43
fs             0x0 0
gs             0x63 99
(gdb) x /5a 0xffffd088
0xffffd088: 0x0 0xf7e22637 0x1 0xffffd124
0xffffd098: 0xffffd12c
(gdb) si
20 }
1: x/i $pc
=> 0x804841c <main+20>: leave 
(gdb) i r
eax            0xe 14
ecx            0xaed89f2 183339506
edx            0x3 3
ebx            0x0 0
esp            0xffffd088 0xffffd088
ebp            0xffffd088 0xffffd088
esi            0xf7fba000 -134504448
edi            0xf7fba000 -134504448
eip            0x804841c 0x804841c <main+20>
eflags         0x202 [ IF ]
cs             0x23 35
ss             0x2b 43
ds             0x2b 43
es             0x2b 43
fs             0x0 0
gs             0x63 99
(gdb) x /5a 0xffffd088
0xffffd088: 0x0 0xf7e22637 0x1 0xffffd124
0xffffd098: 0xffffd12c
(gdb) si
0x0804841d 20 }
1: x/i $pc
=> 0x804841d <main+21>: ret   
(gdb) i r
eax            0xe 14
ecx            0xaed89f2 183339506
edx            0x3 3
ebx            0x0 0
esp            0xffffd08c 0xffffd08c
ebp            0x0 0x0
esi            0xf7fba000 -134504448
edi            0xf7fba000 -134504448
eip            0x804841d 0x804841d <main+21>
eflags         0x202 [ IF ]
cs             0x23 35
ss             0x2b 43
ds             0x2b 43
es             0x2b 43
fs             0x0 0
gs             0x63 99
(gdb) x /5a 0xffffd08c
0xffffd08c: 0xf7e22637 0x1 0xffffd124 0xffffd12c
0xffffd09c: 0x0
(gdb) si
0xf7e22637 in __libc_start_main () from /lib32/libc.so.6
1: x/i $pc
=> 0xf7e22637 <__libc_start_main+247>: add    $0x10,%esp
(gdb)

转载于:https://www.cnblogs.com/Jclemo/p/6138069.html

GDB是一款常用的调试工具,用于在程序运行过程中进行调试和分析。它可以帮助开发人员定位和修复程序中的错误。 GDB的主要功能包括: 1. 设置断点:可以在程序的指定位置设置断点,当程序执行到该位置时会暂停执行,方便进行调试。 2. 单步执行:可以逐行或逐语句地执行程序,观察程序的执行过程。 3. 查看变量:可以查看程序中的变量的值,帮助分析程序的状态。 4. 修改变量:可以在调试过程中修改变量的值,以验证不同情况下的程序行为。 5. 回溯调用栈:可以查看函数调用的顺序和参数值,帮助分析函数调用过程。 6. 内存查看:可以查看程序运行时的内存状态,包括堆栈、全局变量等。 7. 多线程调试:支持对多线程程序进行调试,可以查看和控制各个线程的执行。 IDA Pro是一款强大的反汇编和逆向工程工具,主要用于分析和理解二进制文件。它可以将二进制文件转换为汇编代码,并提供丰富的功能来分析代码结构、函数调用关系、数据引用等。 IDA Pro的主要功能包括: 1. 反汇编:将二进制文件转换为汇编代码,方便分析和理解程序的执行流程。 2. 逆向工程:通过分析代码结构和函数调用关系,还原程序的高级语言结构,帮助理解程序的逻辑。 3. 数据引用分析:可以查找和分析程序中的数据引用关系,帮助理解数据的使用和修改过程。 4. 寻找漏洞:通过分析程序的代码和数据,可以发现潜在的漏洞和安全问题。 5. 插件扩展:IDA Pro支持插件扩展,可以根据需要添加自定义功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值