어셈 질문입니다(메모리맵 그리기)

wcg0112의 이미지

804a2be: e8 ed e2 ff ff call 80485b0
804a2c3: 83 c4 10 add $0x10,%esp
804a2c6: c7 45 fc 01 00 00 00 movl $0x1,0xfffffffc(%ebp)
804a2cd: 83 7d fc 16 cmpl $0x16,0xfffffffc(%ebp)

call 80485b0 이거

esp가 0xbffd73e0 인상태에서

콜하니까 esp는 0xbffd73de 가 되네요

저 사이에 리턴 어드레스 푸쉬되는겁니까? (저장)

그리고

804a2c3: 83 c4 10 add $0x10,%esp
804a2c6: c7 45 fc 01 00 00 00 movl $0x1,0xfffffffc(%ebp)
804a2cd: 83 7d fc 16 cmpl $0x16,0xfffffffc(%ebp)

첨에껀 상수 10 만큼 메모리 주소에 더해주란 소리구

두번째 세번째가 뭐 어찌란말인지 몰겠네요 ㅠㅠ

headbang의 이미지

esp는 stack pointer이고, ebp는 frame pointer입니다.
함수호출이 되면 esp와 ebp가 동시에 갱신이 됩니다. 그후에 esp는 push, pop에 의해 증가 감소 하지만 ebp는 변하지 않아서 함수 내에 할당되는 automatic variable와 함수에 전달된 인수(arguments)를 접근할 때 기준점이 됩니다.
0xfffffffc(%ebp) --> 0xfffffffc가 -4가 이므로, 주소 (%ebp-4)를 뜻합니다. 십중 팔구 함수의 automatic variable 이겠죠.

컴공과이시라면 학부때 배운 Programming Language 책을 한번 찾아보세요. 그림으로 알기 쉽게 설명되어 있을 겁니다.

Necromancer의 이미지

call은 점프전에 return될 address를 스택으로 밀어 넣습니다.

Written By the Black Knight of Destruction

Written By the Black Knight of Destruction