cmp 1 2 -> 앞을 기준으로 내부적으로 마이너스 연산을 함
JA
JZ - zero flag가 1일 때 점프
JNE -> 제로 플레그가 0일떄 점프
JB
-------------
CALL
함수 호출를 할 때 사용하는 명령어
함수를 호출하지만 가기전에 하는 일이 있음
-> 다음실행될 명령어의 주소(return 주소) 를 stack에 넣어두고 함수를 호출함
stack frame
stack frame의 기준점 -> ebp
-> 안에 아무것도 없을 때 최상단은 ebp
-> 값이 들어가면 esp가 올라가지만 주소는 낮아짐
return -> 값을 돌려줌 -> eax레지스터에 값이 저장 -> RET
#include <stdio.h>
int Sum(){
int a=1;
int b=2;
printf("Result\n");
return a+b;
}
int main(){
int result=0;
printf("%d\n",result);
_asm{
call Sum
mov result, eax // 리턴값을 변수에 저장
}
printf("%d\n",result);
return 0;
}
*JMP 는 갔다가 돌아오지 않지만 CALL은 돌아옴
-> 다음 실행될 명령어의 주소 (return 주소)를 stack에 넣기 때문에 돌아옴
-> mov 이용해서 다음실행될 명령어의 주소를 넣음
------------------
RET = RETN
(stack frame에 최상단에 있는값) esp 레지스터가 가리키는 값을 eip레지스터에 저장
RET imm8
-> RET 에는 상수값이 올 수 있음
-> esp가 eip에 가는 순간 eip 레지스터 값을 더해줌
-------------
NOP
no operation
아무 동작도 수행하지 않는 명령어
1 byte의 크기를 가짐 -> 0x90
NOP를 이용한 시스템 공격
ex)
JMP L1 -> 5 byte
CALL L1 -> 3 byte
-> 명령어를 JMP에서 CALL로 바꿀 경우 명령어의 크기가 5 byte에서 3byte로 바뀌면서
2 byte의 공백을 메우기 위해 NOP을 사용함
-----------------
assembly로
strcmp() - 문자열 비교
strlen()
strcpy()
strcat()
strstr() - 문자열 검색
strchr() - 한 문자 검색
구현
-----------------------
strlen()
int my_strlen(char * str){
int i=0;
while(str[i]!=0){
i++;
}
printf("%d\n",i);
return 0;
}
int my_asm_strlen(char * s){
int cnt=0;
_asm{
mov esi,dword ptr[s] // 문자열 주소 -> 값을 가져오려면 lea가 아니라 mov를 사용
STA:
cmp byte ptr[esi], 0x00
je END
inc cnt
inc esi
jmp STA
}
END:
printf("%d\n",cnt);
return cnt;
}
int main(){
char *ch="aaaa";
my_asm_strlen(ch);
return 0;
}
------------------
strcmp
int my_strcmp(char * s, char *s2){
int i=0;
while(s2[i]!=0){
if(s[i]!=s2[i]){
printf("다른 문자열입니다\n");
return 0;
}
i++;
}
printf("같은 문자열입니다\n");
return 0;
}
int my_asm_strcmp(char* s, char s2){
_asm{
}
}
int main(){
char *ch2="aa";
my_strcmp(ch,ch2);
return 0;
}
------------------
보고서
일관성
레지스터 정리
자세한 목차, 개요
함수에 대한 설명
소스 코드 구현
주석
강조 부분
실행
그 과정 디버깅하여 설명
함수의 헤더, 인자 , 설명,
결론
(10
mkgk888에 업로드
snagit.exe
'Reversing' 카테고리의 다른 글
analyzing files using ollydbg (0) | 2014.09.24 |
---|---|
analyzing assembly sentences (0) | 2014.09.23 |
assembly lingoes and questions (0) | 2014.09.19 |
assembly lingoes (0) | 2014.09.18 |
assembly lingoes (0) | 2014.09.17 |