disassemble 5

3) hello world disassemble

Hello world Disassemble 1. 환경 - Cent OS Linux release 7.3.1611 (Core) -64 bit 2. 소스 #include int main(int argc, const char *argv[]) { printf("hellow world\n"); return 0; }3. 목표 - 메모리의 hello world 찾기 4. gdb를 이용한 disassemble - main부터 보기 위해 main에 break 걸기 [root@client basic]# gdb main(gdb) b mainBreakpoint 1 at 0x40053c: file main.c, line 5. (gdb) rThe program being debugged has been started alread..

disassemble 2017.03.18

2) gdb 출력 형식 지정

gdb 출력 형식 지정[변수 값 출력] p/[format] $보고자하는것 p/t // 2진수 p/o // 8진수 p/d // 10진수 (int) p/u // 부호없는 10진수 (unsigned int) p/x // 16진수 //주소를 보기위해 가장 많이 쓴다. p/c // 문자형 출력 (크기가 4byte 이상인 변수는 처음 1바이트를 출력한다.) p/f // 부동 소수점 값 형식으로 출력 p/a // 가장 가까운 심볼의 오프셋을 출력 (p/a 0x0801295 를 입력하면, 0x0801295와 가장 가까운 어셈블리 명령어줄의 offset을 출력) [메모리 출력] x 명령어는 메모리 특정 범위의 값들을 확인하는데 사용하는 명령어다. x/[범위][출력format][단위] x/[범위][단위][출력format]..

disassemble 2017.03.18

1) stack frame에대한 정리

stack frame에대한 정리stack이란 무엇인가? - 메모리의 스택 영역을 말한다. frame이란 무엇인가? - 힌 함수에서 사용되는 스택의 범위라고 할수 있다. - 아래는 gdb를 사용해서 core파일을 stack frame 정보를 본것이다. 총 3개의 stack frame이 존재한다.(#0,#1,#2 가 frame 번호를 의미한다) - frame 번호가 높을수록 상위 frame이라고한다. - stack frame을 통해서 함수의 호출 순서를 알 수 있다. gdb main core.2424(gdb) bt#0 0x0000003a48c47dec in vfprintf () from /lib64/libc.so.6#1 0x0000003a48c4f14a in printf () from /lib64/libc...

disassemble 2017.03.11

0) disassemble의 종류 GAS / NASM

[Assemble] GAS vs NASM 1. 정의 - GAS(GNU Assembler) - NASM(Netwide Assembler) 2. 사용처 - 대표적 사용 : Linux(GAS) ,Window(NASM) - GAS : GNU 프로젝트에서 사용됨 - NASM : 인텔 x86아키텍쳐용 어셈블러/디스어셈블러에서 사용됨 3. 사용 문법 - GAS : AT&T 문법 사용 - NASM : 인텔 어셈블리 문법의 변형된 형태를 사용 4. Operand 비교 1) src와 dest의 순서 - GAS : movl $4, %eax ( mov src dst) - NASM: mov eax, 4 ( mov dst src) 2) immdediate operator의 형식 - GAS : pushl $4 - NASM: pus..

disassemble 2017.03.11