%rax 寄存器是否在 'call' 指令之后包含函数的 return 值?
Does the %rax register contain the return value of function right after the 'call' instruction?
这是一个简单的反汇编代码。
push %rbp
mov %rsp,%rbp
sub [=12=]x10,%rsp
movq [=12=]x0,-0x8(%rbp)
mov [=12=]xf,%edi
callq 1070 <malloc@plt>
mov %rax,-0x8(%rbp)
mov -0x8(%rbp),%rax
mov %rax,%rdi
callq 1060 <free@plt>
mov [=12=]x0,%eax
malloc函数的return值是否在callq 1070 <malloc@plt>
之后立即恢复到rax寄存器中?
我检测了调用 malloc_usable_size
的代码以获取 malloc
函数的 malloced 大小,但它遇到了 segmentation fault
。我还以为我把地址转错了malloc_usable_size
.
对于str = (char *) malloc(15);
,值str
是否保存在%rax中?
我想问的是:str
的值是否在callq 1070 <malloc@plt>
之后mov %rax,-0x8(%rbp)
之前的%rax中恢复了?可以使用%rax的值来获取malloced area的信息,比如malloced area的大小?
What I want to ask is: if the value of str is restored in %rax right after callq 1070 <malloc@plt>
and before mov %rax,-0x8(%rbp)
?
你的问题非常不清楚。
str
变量驻留在地址 rpb[-8]
的内存中。在 malloc
return 之后,寄存器 rax
立即包含 malloc
return 值,并且该值被 存储 在地址 rbp[-8]
的内存中(即它存储在 str
)。
请注意,您的反汇编使用的是 AT&T 语法。此指令 mov %rax,-0x8(%rbp)
将值存储在 rax
中的位置 rpb[-8]
。
这是一个简单的反汇编代码。
push %rbp
mov %rsp,%rbp
sub [=12=]x10,%rsp
movq [=12=]x0,-0x8(%rbp)
mov [=12=]xf,%edi
callq 1070 <malloc@plt>
mov %rax,-0x8(%rbp)
mov -0x8(%rbp),%rax
mov %rax,%rdi
callq 1060 <free@plt>
mov [=12=]x0,%eax
malloc函数的return值是否在callq 1070 <malloc@plt>
之后立即恢复到rax寄存器中?
我检测了调用 malloc_usable_size
的代码以获取 malloc
函数的 malloced 大小,但它遇到了 segmentation fault
。我还以为我把地址转错了malloc_usable_size
.
对于str = (char *) malloc(15);
,值str
是否保存在%rax中?
我想问的是:str
的值是否在callq 1070 <malloc@plt>
之后mov %rax,-0x8(%rbp)
之前的%rax中恢复了?可以使用%rax的值来获取malloced area的信息,比如malloced area的大小?
What I want to ask is: if the value of str is restored in %rax right after
callq 1070 <malloc@plt>
and beforemov %rax,-0x8(%rbp)
?
你的问题非常不清楚。
str
变量驻留在地址 rpb[-8]
的内存中。在 malloc
return 之后,寄存器 rax
立即包含 malloc
return 值,并且该值被 存储 在地址 rbp[-8]
的内存中(即它存储在 str
)。
请注意,您的反汇编使用的是 AT&T 语法。此指令 mov %rax,-0x8(%rbp)
将值存储在 rax
中的位置 rpb[-8]
。