[Assembly] 디버깅을 위한 8086 어셈블리
디버깅을 위해서는 항상 소스코드 레벨에서 할 수 없기때문에 어셈블리언어를 읽을 수 있어야 합니다.
디버깅을 위한 어셈블리는 언어를 깊이 많이 알지 못하더라도 디버깅을 할 수 있지만,
어셈블리를 모르면 디버깅하는데 많은 어려움이 있으므로 이번에 몇가지 소개시켜드리겠습니다.
실제로 디버깅시 사용되는 어셈블리어는 많이 없으며, 자주 나오는 패턴에는 소스코드를 보듯 익숙해질 필요가 있습니다.
ASSEMBLY
가장 대표적인 명령어를 예로 들자면 아래와 같습니다.
mov
(값을 대입)
add
(더하기)
sub
(빼기)
inc
(1 더하기)
dec
(1 빼기)
jmp
(go to)
call
(함수 호출)
cmp
(두 값을 비교)
각각 C언어와 비교하면서 어떻게 코드가 생성되는지 보겠습니다.
해당 코드는 visual studio 2015 에서 테스트 하였습니다.
mov
int number = 0;
0108383E mov dword ptr [number],0
char flag = 1;
01083845 mov byte ptr [flag],1
char name[] = "hacker_n0te";
01083849 mov eax,dword ptr [string "hacker_n0te" (01086CB8h)]
0108384E mov dword ptr [name],eax
add
int number1 = 1;
003D3863 mov dword ptr [number1],1
int number2 = 2;
003D386A mov dword ptr [number2],2
int number3 = 3;
003D3871 mov dword ptr [number3],3
number = number1 + number2 + number3;
003D3878 mov eax,dword ptr [number1]
003D387B add eax,dword ptr [number2]
003D387E add eax,dword ptr [number3]
003D3881 mov dword ptr [number],eax
sub
int number1 = 1;
00113863 mov dword ptr [number1],1
int number2 = 2;
0011386A mov dword ptr [number2],2
int number3 = 3;
00113871 mov dword ptr [number3],3
number = number3 - number2 - number1;
00113878 mov eax,dword ptr [number3]
0011387B sub eax,dword ptr [number2]
0011387E sub eax,dword ptr [number1]
00113881 mov dword ptr [number],eax
jmp
for (int i = 0; i < 10; i++) {
00AE4AAC mov dword ptr [ebp-70h],0
00AE4AB3 jmp main+8Eh (0AE4ABEh)
00AE4AB5 mov eax,dword ptr [ebp-70h] // (main+85h)
00AE4AB8 add eax,1
00AE4ABB mov dword ptr [ebp-70h],eax
00AE4ABE cmp dword ptr [ebp-70h],0Ah // (main+8Eh)
00AE4AC2 jge main+0A1h (0AE4AD1h)
if (true) {
00AE4AC4 mov eax,1
00AE4AC9 test eax,eax
00AE4ACB je main+9Fh (0AE4ACFh)
continue;
00AE4ACD jmp main+85h (0AE4AB5h)
}
}
... // (main+0A1h)
call
printf(name);
00814ADD lea eax,[name]
00814AE0 push eax
00814AE1 call _printf
(0811352h)
00814AE6 add esp,4
cmp
if (number1 == number2) {
00E34A9E mov eax,dword ptr [number1]
00E34AA1 cmp eax,dword ptr [number2]
if (number1 == number2) {
00E34AA4 jne main+7Dh (0E34AADh)
number3 = 10;
00E34AA6 mov dword ptr [number3],0Ah
}
'⌨ DEVELOPMENT > Debugging' 카테고리의 다른 글
dump 분석을 위한 windbg 64bit 다운로드 및 설치 (0) | 2019.08.04 |
---|---|
[Debugging] 프로세스 크래시 발생시 덤프 남기기 (0) | 2016.01.22 |
[WinDbg] 특정 프로세스 디버깅하기 (0) | 2016.01.13 |
[WinDbg] DriverEntry부터 디버깅 시작하기 (2) | 2016.01.10 |
[windows] 윈도우 64bit Driver 서명없이 로드하기 (2) | 2016.01.10 |
[WinDbg] vmware에 WinDbg 연결하여 디버깅 준비하기 (0) | 2016.01.06 |
[WinDbg] Kernel Debugging을 위한 디버거 다운로드 및 설치! (0) | 2016.01.05 |
visual studio 디버깅시 디스어셈블리 확인하기 (0) | 2015.12.31 |
댓글
이 글 공유하기
다른 글
-
dump 분석을 위한 windbg 64bit 다운로드 및 설치
dump 분석을 위한 windbg 64bit 다운로드 및 설치
2019.08.04 -
[Debugging] 프로세스 크래시 발생시 덤프 남기기
[Debugging] 프로세스 크래시 발생시 덤프 남기기
2016.01.22 -
[WinDbg] 특정 프로세스 디버깅하기
[WinDbg] 특정 프로세스 디버깅하기
2016.01.13 -
[WinDbg] DriverEntry부터 디버깅 시작하기
[WinDbg] DriverEntry부터 디버깅 시작하기
2016.01.10