gdb 디스어셈블리에 대한.. 질문..
글쓴이: jyj9782 / 작성시간: 화, 2004/05/25 - 1:24오전
아래 gdb 에서요.
and $0xffff.., %esp 부분은 왜 하는거죠?
그리고 놉코드는 왜 이렇게 많나요?
gcc 다른 버전에서는 많지 않던데. 3.3.3 버전입니다.
그리고 저기 movl 부분에서 (%esp, 1) 이 의미는 뭐죠?
Quote:
(gdb) disass main
Dump of assembler code for function main:
0x8048364 <main>: push %ebp
0x8048365 <main+1>: mov %esp,%ebp
0x8048367 <main+3>: sub $0x8,%esp
0x804836a <main+6>: and $0xfffffff0,%esp
0x804836d <main+9>: mov $0x0,%eax
0x8048372 <main+14>: sub %eax,%esp
0x8048374 <main+16>: movl $0x80484a4,(%esp,1)
0x804837b <main+23>: call 0x8048288 <printf>
0x8048380 <main+28>: leave
0x8048381 <main+29>: ret
0x8048382 <main+30>: nop
0x8048383 <main+31>: nop
0x8048384 <main+32>: nop
0x8048385 <main+33>: nop
0x8048386 <main+34>: nop
0x8048387 <main+35>: nop
0x8048388 <main+36>: nop
0x8048389 <main+37>: nop
0x804838a <main+38>: nop
0x804838b <main+39>: nop
0x804838c <main+40>: nop
0x804838d <main+41>: nop
---Type <return> to continue, or q <return> to quit---
0x804838e <main+42>: nop
0x804838f <main+43>: nop
End of assembler dump.
(gdb)
Forums:
andl $0xfffffff0, %esp 는, 스택을 16bit 바운더
andl $0xfffffff0, %esp 는, 스택을 16bit 바운더리에 맞추려는 것입니다.
cache hit 상승을 노린, 성능상의 최적화로 알고 있구요.
nop은.. 잘은 모르겠습니다만, -O옵션을 주시고 컴파일해도 나오나요?
----
Let's shut up and code.
댓글 달기