나는 32 비트 기계를 공부했고, pop $ eax와 mov $ 0, % eax에서 세 번 같은 12 %의 하위, % esp를 알고있다.
하지만 우리가 왜 $ 18, % rsp를 시작 프로 시저 호출 또는 sub $ 18를 사용하는지 모르겠다. % rsp는 x86-64 시스템에서 프로 시저 호출로 시작한다.
왜 컴파일러는이 규칙을 프로 시저 호출에 사용합니까? 인수 규칙?
0x0000000000400df3 <main+191>: mov $0x402227,%edi
0x0000000000400df8 <main+196>: callq 0x400ab8 <[email protected]>
0x0000000000400dfd <main+201>: callq 0x4014c0 <read_line>
0x0000000000400e02 <main+206>: mov %rax,%rdi
0x0000000000400e05 <main+209>: callq 0x401139 <phase_3>
-----------------------------------------------------------------------
example:
0x0000000000401139 <example+0>: sub $0x18,%rsp
0x000000000040113d <example+4>: lea 0x8(%rsp),%rcx
0x0000000000401142 <example+9>: lea 0xc(%rsp),%rdx
0x0000000000401147 <example+14>: mov $0x40248a,%esi
0x000000000040114c <example+19>: mov $0x0,%eax
0x0000000000401151 <example+24>: callq 0x400ac8 <[email protected]>
0x0000000000401156 <example+29>: cmp $0x1,%eax
귀하의 기능은 어떻게 생겼습니까? –
0x18과 18.의 차이점에 의해 downvote가 필요합니다. :) –
Aha! 나는 실수로 0x18 = 24 lol을 보았다. – Silvester