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:
댓글 달기