안녕하세요 ^^;
간단한 어셈블리어 분석중인데요..
아래에 보시면 제가 빨간색으로 표시된 부분이 있는데 도통 뭐하는 작업인지를 잘 모르겠네요..
아시는 분 계시면 죄송스럽지만 설명 달아주셔도 되구요.. 아니면 어딜 참고하면 알 수 있는지
힌트 좀 주셨으면 감사하겠습니다 +_+;;
.file "sample.c"
.section .rodata
.LC0:
----------------------------
sample.c
----------------------------
#include <stdio.h> int main()
{
int local1 = 0;
char* local2[2];
local2[0] = "I'am ";
local2[1] = "a boy"; printf("%s %s", local2[0], local2[1]); return 0;
}
-----------------------------
.file "sample.c"
.section .rodata
.LC0:
.string "I'am "
.LC1:
.string "a boy"
.LC2:
.string "%s %s"
.text
.globl main
.type main, @function
main:
leal 4(%esp), %ecx : (질문 1)함수 프롤로그전에 이 명령들이 수행되는데 정확히 어떤 작업을 하는 것인지를 모르겠습니다..
andl $-16, %esp
pushl -4(%ecx)
pushl %ebp // 함수 프롤로그
movl %esp, %ebp
pushl %ecx
subl $36, %esp : (질문 2)지역변수는 총 12바이트를 필요로 하는데 왜 이렇게 크기 할당되는 걸까요?
movl $0, -8(%ebp)
movl $.LC0, -16(%ebp)
movl $.LC1, -12(%ebp)
movl -12(%ebp), %eax
movl -16(%ebp), %edx
movl %eax, 8(%esp)
movl %edx, 4(%esp)
movl $.LC2, (%esp)
call printf
movl $0, %eax // 함수 에필로그
addl $36, %esp
popl %ecx
popl %ebp
leal -4(%ecx), %esp
ret
.size main, .-main
.ident "GCC: (GNU) 4.1.2 20080704 (Red Hat 4.1.2-46)"
.section .note.GNU-stack,"",@progbits
간단한 어셈블리어 분석중인데요..
아래에 보시면 제가 빨간색으로 표시된 부분이 있는데 도통 뭐하는 작업인지를 잘 모르겠네요..
아시는 분 계시면 죄송스럽지만 설명 달아주셔도 되구요.. 아니면 어딜 참고하면 알 수 있는지
힌트 좀 주셨으면 감사하겠습니다 +_+;;
.file "sample.c"
.section .rodata
.LC0:
----------------------------
sample.c
----------------------------
#include <stdio.h> int main()
{
int local1 = 0;
char* local2[2];
local2[0] = "I'am ";
local2[1] = "a boy"; printf("%s %s", local2[0], local2[1]); return 0;
}
-----------------------------
.file "sample.c"
.section .rodata
.LC0:
.string "I'am "
.LC1:
.string "a boy"
.LC2:
.string "%s %s"
.text
.globl main
.type main, @function
main:
leal 4(%esp), %ecx : (질문 1)함수 프롤로그전에 이 명령들이 수행되는데 정확히 어떤 작업을 하는 것인지를 모르겠습니다..
andl $-16, %esp
pushl -4(%ecx)
pushl %ebp // 함수 프롤로그
movl %esp, %ebp
pushl %ecx
subl $36, %esp : (질문 2)지역변수는 총 12바이트를 필요로 하는데 왜 이렇게 크기 할당되는 걸까요?
movl $0, -8(%ebp)
movl $.LC0, -16(%ebp)
movl $.LC1, -12(%ebp)
movl -12(%ebp), %eax
movl -16(%ebp), %edx
movl %eax, 8(%esp)
movl %edx, 4(%esp)
movl $.LC2, (%esp)
call printf
movl $0, %eax // 함수 에필로그
addl $36, %esp
popl %ecx
popl %ebp
leal -4(%ecx), %esp
ret
.size main, .-main
.ident "GCC: (GNU) 4.1.2 20080704 (Red Hat 4.1.2-46)"
.section .note.GNU-stack,"",@progbits