GDB调试汇编堆栈过程分析

摘要:
GDB调试程序集堆栈准备·终端编译工具:·编译64位Linux版本的32位二进制文件,需要安装一个库,并使用指令sudoapt getinstalllibc6-dev-i386分析过程·1.生成程序集代码:gcc gtest。c-otest-m32·2.调试:gdbtest··3.设置断点,因为其目的是分析而不是调试bug,因此我们在主函数中设置断点··4.启动gdb调试:r(un),如果您想获得

GDB调试汇编堆栈

准备工作

· 终端编译工具:

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

分析过程

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

·         2.调试:gdb test

·         GDB调试汇编堆栈过程分析第1张

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

·      GDB调试汇编堆栈过程分析第2张  

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

·  GDB调试汇编堆栈过程分析第3张      

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

· GDB调试汇编堆栈过程分析第4张

·        

1列:寄存器名称

·         第2列:寄存器的地址

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

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

·         GDB调试汇编堆栈过程分析第5张

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

· 初始

·       GDB调试汇编堆栈过程分析第6张   

· push $0x1

·  GDB调试汇编堆栈过程分析第7张

 

·  GDB调试汇编堆栈过程分析第8张

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

 GDB调试汇编堆栈过程分析第9张

GDB调试汇编堆栈过程分析第10张

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

 GDB调试汇编堆栈过程分析第11张

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

· GDB调试汇编堆栈过程分析第12张

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

· GDB调试汇编堆栈过程分析第13张         

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

·     GDB调试汇编堆栈过程分析第14张

· push %ebp  初始化栈指针·     

 GDB调试汇编堆栈过程分析第15张

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

·          GDB调试汇编堆栈过程分析第16张

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

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

·     GDB调试汇编堆栈过程分析第17张     

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

·       GDB调试汇编堆栈过程分析第18张   

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

·         GDB调试汇编堆栈过程分析第19张 

· leave   返回准备栈

·   GDB调试汇编堆栈过程分析第20张       

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

·      GDB调试汇编堆栈过程分析第21张    

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

·         GDB调试汇编堆栈过程分析第22张 

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

GDB调试汇编堆栈过程分析第23张

 

GDB调试汇编堆栈过程分析第24张

GDB调试汇编堆栈过程分析第25张

 

附上完整调试过程

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)

免责声明:文章转载自《GDB调试汇编堆栈过程分析》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇SQL Server使用游标或临时表遍历数据ssh交叉编译安装提示代码块临时下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

手把手教你实现热更新功能,带你了解 Arthas 热更新背后的原理

摘自:https://www.cnblogs.com/goodAndyxublog/p/11880314.html 手把手教你实现热更新功能,带你了解 Arthas 热更新背后的原理 文章来源:https://studyidea.cn/java-hotswap 一、前言# 一天下午正在摸鱼的时候,测试小姐姐走了过来求助,说是需要改动测试环境 mock...

python嵌入C++ boost.python如何在C++中调用含有不定长参数tuple变量和关键字参数dict变量的函数

    这个问题是在我尝试利用pygraphviz嵌入我的C++代码绘制二叉树的时候发现的.找了半天资料,这里我把几种常用的C++调用 PYTHON利用 boost.python 的方法作一个总结,希望能让别人少走弯路,因为有些内容还找不到中文文档,虽然都不难但是开始摸索 还是费时间的.     我个人认为boost.python真的是非常的COOL,基...

Vue-CLI项目搭建

一、环境搭建 1、安装服务器node 官网下载 https://nodejs.org/zh-cn/ node:用C++语言编写,用来运行JavaScript语言     node可以为前端项目提供server (包含了socket) 2、安装包管理器npm 管理员命令行安装:window系统:npm install -g cnpm --registry=h...

C++ 常见崩溃问题分析

一、前言 从事自动化测试平台开发的编程实践中,遭遇了几个程序崩溃问题,解决它们颇费了不少心思,解决过程中的曲折和彻夜的辗转反侧却历历在目,一直寻思写点东西,为这段难忘的经历留点纪念,总结惨痛的教训带来的经验,以期通过自己的经历为他人和自己带来福祉:写出更高质量的程序; 由于 C 和 C++ 这两种语言血缘非常近,文本亦对 C 编程语言有借鉴作用; 二、C+...

Java探针

  使用java代理来实现java字节码注入 使用JavaSsist可以对字节码进行修改 使用ASM可以修改字节码 使用Java代理和ASM字节码技术开发java探针工具可以修改字节码 备注:javassist是一个库,实现ClassFileTransformer接口中的transform()方法。ClassFileTransformer 这个接口的目的...

R0~R16寄存器作用

R0-R3     用作传入函数参数,传出函数返回值。在子程序调用之间,可以将 r0-r3 用于任何用途。 被调用函数在返回之前不必恢复 r0-r3。如果调用函数需要再次使用 r0-r3 的内容,则它必须保留这些内容。 R4-R10 被用来存放函数的局部变量。如果被调用函数使用了这些寄存器,它在返回之前必须恢复这些寄存器的值。 R11- fp(frame...