2
我是新手到組件的編程和我試圖通過64但GNC編譯器(GCC)發射的組件進行解碼。彙編代碼:後面邏輯計算偏移量堆
void fun(int a, int b)
{
int h=0;
}
int main()
{
int d = 0;
fun(d,10);
}
的大會,這是
.globl fun
.def fun; .scl 2; .type 32; .endef
fun:
pushq %rbp #
movq %rsp, %rbp #,
subq $16, %rsp #,
movl %ecx, 16(%rbp) # a, a
movl %edx, 24(%rbp) # b, b
movl $0, -4(%rbp) #, h
leave
ret
.def __main; .scl 2; .type 32; .endef
.globl main
.def main; .scl 2; .type 32; .endef
main:
pushq %rbp #
movq %rsp, %rbp #,
subq $48, %rsp #,
call __main #
movl $0, -4(%rbp) #, d
movl -4(%rbp), %eax # d, tmp59
movl $10, %edx #,
movl %eax, %ecx # tmp59,
call fun #
leave
ret
我對本次大會的一些疑慮。
[1]什麼是用於在主從棧指針中減去48的精確算術。 [2]的樂趣,相信從基指針的偏移量來訪問參數從16(返回地址和基指針即兩個存儲器位置進棧(stack幀爲8個字節)開始的功能,但爲什麼下一偏移是24而不是16
movl %ecx, 16(%rbp) # a, a
movl %edx, 24(%rbp) # b, b
爲什麼它不是: MOVL%ecx中,16(%RBP)#A,A MOVL%EDX,20(%RBP)#b,b
[3 ]什麼是後面在樂趣從棧指針中減去16,當只有一個局部變量所涉及的邏輯。不應該是其8?
謝謝。
我不能重現你的裝配也不管我嘗試哪些選項和gcc版本:http://pastebin.com/Fa6TLqWC編譯器使用:http://gcc.godbolt.org/ – Brandon