728x90
반응형
main:
push1 %ebp //프롤로그, 메인함수 프레임 생성
movl %esp, %ebp //프롤로그, 메인함수 프레임 생성
subl $4, %esp //int c = 10; esp에서 4를 뺀 값을 esp에 넣음, esp가 main의 SFT 공간 위로 공간이 생김
movl $10, -4(%ebp) //ebp로부터 4칸 떨어진 위치에 10이라는 값을 넣음
pushl $2
pushl $1
call myfunc
addl $8, %esp
movl %eax, %eax
movl %eax, -4(%ebp)
xorl %eax, %eax
jmp .L2
.L2:
leave //에필로그 작업 함수
ret //에필로그 작업 함수
#gcc -S -o sample.a sample.c //컴파일시 어셈블리어로 컴파일
ㅇ GDB
- 컴파일 시 #gcc -g -o sample sample.c 로 수행, 실행은 #gdb sample
- list : 소스코드 출력
- disass 함수명, 메모리주소 : 명령어 출력
ex) disass main시 디스어셈블한 main함수의 결과가 나옴
- b 라인번호, 메모리주소 : 중지점 설정
- run : 실행
- continue : 실행 재개
- next(step over) : 한줄 실행 (함수 호출 구문을 통으로 실행하는 구문)
step(step into) : 한줄 실행 (callee 함수를 타고 들어가서 첫번째 라인을 실행하는 구문)
à 함수호출 구문인 경우 쓰임이 달라짐
- print 변수명
- info reg 레지스터 : 레지스터값 조회
ㄴ info locals : 모든 지역변수 값 출력
- x/4wx(16진수) 메모리주소 : 메모리값 조회
à 1: byte
word : 2byte
2word(double word) : 4byte
728x90
반응형