IA-32는 겉으로 볼 때 CISC 머신이므로 push 명령에 indirect addressing을 못쓰게 하는 등의 제약을 두지 않습니다. 다만 컴파일러가 만들어 낸 코드들은 효율성 측면에서 push/pop 명령에 레지스터 외의 직간접 메모리 접근을 최대한 기피하는 듯 하더군요.
결론적으로 저 명령은 AT&T 문법에서 Intel 문법으로 바꾸면 push dword ptr [ebp+eax*4-28] 입니다. [ebp+eax*4-28] 위치의 32비트 값을 현재의 esp 위치에 push 하라는 것입니다.
어느
어느 아키텍쳐인지요.
제가 예전에 인텔 문서에서 본 내용으로는
push 명령은 인수가 1개 밖에 없습니다.
레지스터 아니면 메모리 주소가 들어오죠.
메모리 주소지정에 레지스터 두개 썼는지 획인해보세요.
Written By the Black Knight of Destruction
Written By the Black Knight of Destruction
IA-32 아키텍쳐에 존재하는 명령입니다.
IA-32는 겉으로 볼 때 CISC 머신이므로 push 명령에 indirect addressing을 못쓰게 하는 등의 제약을 두지 않습니다. 다만 컴파일러가 만들어 낸 코드들은 효율성 측면에서 push/pop 명령에 레지스터 외의 직간접 메모리 접근을 최대한 기피하는 듯 하더군요.
결론적으로 저 명령은 AT&T 문법에서 Intel 문법으로 바꾸면 push dword ptr [ebp+eax*4-28] 입니다. [ebp+eax*4-28] 위치의 32비트 값을 현재의 esp 위치에 push 하라는 것입니다.
그리고.. 실수가 있었습니다.
-28이 아니라 -28h입니다.
0xffffffd8 = -0x28
댓글 달기