首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >gdb在对缓冲区进行零化时显示错误的地址。

gdb在对缓冲区进行零化时显示错误的地址。
EN

Stack Overflow用户
提问于 2020-02-07 16:41:26
回答 1查看 131关注 0票数 0

我的目标是初始化程序集中的缓冲区。我在64位linux和gdb上使用NASM进行调试。相关的汇编程序如下(我复制粘贴从gdb的TUI模式,以便您可以看到行号):

代码语言:javascript
复制
│   4           section .data 
│   5            
│   6           length dd 4096       
│   7           format db "%20ld",10,0         
│   8         
│   9           section .bss 
│   10
│   11          buffer resd 4096

│   83          init_buffer: 
│   84            ;we will use r8 for our counter 
│   85            ;and r9 for the buffer base address 
│   86            xor r8,r8
│   87            lea r9, [buffer]
│   88            mov r10d, DWORD 0xDADADA; not 0 to make debugging easier
│   89            mov eax, [length]   
│   90            movsxd rax, eax
│   91          .init_buffer_loop:
│   92            mov [r9 + r8*4], r10d
│   93            inc r8 
│   94            cmp r8, rax 
│   95            jb .init_buffer_loop
│   96            ret

我使用以下命令构建程序(我在另一时刻使用printf ):

代码语言:javascript
复制
nasm -F dwarf -f elf64 myProgram.asm && gcc -g myProgram.o

在调试另一个问题(我使用gdb -tui a.out)时,我意识到r9中的值和buffer的地址是不同的:

代码语言:javascript
复制
(gdb) b    87
Breakpoint 1 at 0x4011a8: file myProgram.asm, line 87.
(gdb) r
Starting program: /path/to/my/program

Breakpoint 1, init_buffer () at myProgram.asm:87
(gdb) p    &buffer
$1 = (char **) 0x7ffff7fa0250 <buffer>
(gdb) n
(gdb) i    r r9
r9             0x405034            4214836
(gdb) n
init_buffer.init_buffer_loop () at myProgram.asm:92
;//some next instructions are missing here, we are at line 94 now:
(gdb) x    /1xd 4214836
0x405034 <buffer>:    14342874
(gdb) x    /4x 4214836
0x405034 <buffer>:    0x00dadada    0x00000000    0x00000000    0x00000000
(gdb) p    (int[4])buffer
$3 = {0, 0, 0, 0}

装配代码中有错误吗?还是我调试错了?我问了一些程序员,他们无法向我解释,但他们在gdb-ing程序方面没有多少经验.

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-10 09:13:11

如注释所示,在glibc的另一个源文件中有另一个名为buffer的变量。将变量名更改为puffer将得到预期的结果。此外,以下这句话应该让我产生怀疑:

代码语言:javascript
复制
$1 = (char **) 0x7ffff7fa0250 <buffer>

gdb没有干扰我的汇编程序代码中的类型,但它知道我将char **放在缓冲区中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60117659

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档