这是一个简单的反汇编代码。
push %rbp
mov %rsp,%rbp
sub $0x10,%rsp
movq $0x0,-0x8(%rbp)
mov $0xf,%edi
callq 1070 <malloc@plt>
mov %rax,-0x8(%rbp)
mov -0x8(%rbp),%rax
mov %rax,%rdi
callq 1060 <free@plt>
mov $0x0,%eax
malloc 函数的返回值是否在callq 1070 <malloc@plt>
后立即在 rax 寄存器中恢复? 我检测了调用malloc_usable_size
以获取malloc
函数的错误定位大小的代码,但它遇到了segmentation fault
。我以为我把一个错误的地址转移到malloc_usable_size
.
对于str = (char *) malloc(15);
,值str
是否保存在%rax中? 我想问的是:str
的值是否在callq 1070 <malloc@plt>
之后和mov %rax,-0x8(%rbp)
之前在 %rax 中恢复? 可以使用%rax的值来获取错误区域的信息,例如错误区域的大小?
我想问的是:str 的值是否在
callq 1070 <malloc@plt>
之后和mov %rax,-0x8(%rbp)
之前立即在 %rax 中恢复?
你的问题非常不清楚。
str
变量驻留在内存中的地址rpb[-8]
处。在malloc
返回后,寄存器rax
包含malloc
返回值,该值存储在地址rbp[-8]
的存储器中(即存储在str
中)。
请注意,您的反汇编使用的是 AT&T 语法。此指令mov %rax,-0x8(%rbp)
将值存储在位置rpb[-8]
的rax
中。