GCC로 어셈블리 변환 과정에 있어서 문의합니다. ^^;
글쓴이: kis2u / 작성시간: 토, 2003/08/23 - 8:59오후
C 언어에 대해서 어셈블리 언어로 변경하여 Control Flow Graph를 그려 보려고 합니다.
우선 C 언어를 GCC로 컴파일 하여 어셈블리 코드를 일정 블럭 단위로 나누어 구분하려고 하는데요. 다음 예의 분기문을 보시면 다음과 같이 변경 됩니다.
Example
#include <stdio.h>
int main()
{
int a = 0, b = 50, c = 0;
if (a < b)
c++;
printf("%d\n", c);
return 0;
}
GCC로 변환한 Assembly Code
.file "test.c"
.section .rodata
.LC0:
.string "%d\n"
.text
.globl main
.type main, @function
main:
pushl %ebp
movl %esp, %ebp
subl $24, %esp
andl $-16, %esp
movl $0, %eax
subl %eax, %esp
movl $0, -4(%ebp)
movl $50, -8(%ebp)
movl $0, -12(%ebp)
movl -4(%ebp), %eax
cmpl -8(%ebp), %eax
jge .L2
leal -12(%ebp), %eax
incl (%eax)
.L2:
subl $8, %esp
pushl -12(%ebp)
pushl $.LC0
call printf
addl $16, %esp
movl $0, %eax
leave
ret
.size main, .-main
.ident "GCC: (GNU) 3.3.2 20030812 (Debian prerelease)"
위와 같이 변경되는데, 아래와 같이 jge 명령 다음에 레이블을 하나 더 붙여주면 코드를 나누기가 좀 더 쉬울 것 같아서 GCC 옵션중에 아래와 같이 붙여주는 옵션이 있나 해서 문의드립니다. ^^;
....
cmpl -8(%ebp), %eax
jge .L3
.L2:
leal -12(%ebp), %eax
incl (%eax)
.L3:
subl $8, %esp
....Forums:


댓글 달기