본문 바로가기

reversing/어셈블리어6

조건부 점프 명령어 플래그 설명 JZ / JE ZF = 1 0이면 점프 / 같으면 점프 JNZ / JNE ZF = 0 0이 아니면 점프 / 같지 않으면 점프 JS SF = 1 부호인 경우 점프 JNS SF = 0 부호가 아닌 경우 점프 JC / JB / JNAE CF = 1 캐리 시 점프 / 미만(below)이면 점프 / 이상(above or equal)이 아니면 점프 JNC / JNB / JAE CF = 0 캐리가 아닌 경우 점프 / 미만이 아닌 경우 점프 / 이상이면 점프 JO OF = 1 오버플로 되면 점프 JNO OF = 0 오버플로 되지 않으면 점프 JA / JNBE CF = 0 및 ZF = 0 초과(above)하면 점프 / 이하(below or equal)가 아니면 점프 JNA / JBE CF = 1 또는.. 2023. 4. 17.
while 문 while문 코드 int main(int argc, char *argv[]) { int i = 0; while (i 2023. 3. 24.
어셈블리어 명령어 (2) 분기 명령어 조건부 코드 (CC) 설명 플래그 값 E / Z 같은 / 0인 ZF = 1 NE / NZ 다른 / 0이 아닌 ZF = 0 L / NGE 작은 (부호있는 연산) (SF^OF) = 1 (SF ≠ OF) G / NLE 큰 (부호있는 연산) ((SF^OF) | ZF) = 0 GE / NL 크거나 같은 (부호있는 연산) (SF^OF) = 0 LE / NG 작거나 같은 (부호있는 연산) ((SF^) | ZF) = 1 B / NAE 작은 (부호없는 연산) CF = 1 AE / NB 크거나 같은 (부호없는 연산) CF = 0 P / PE PF가 1이면 (짝수 ) PF = 1 NP / P0 PE가 0이면 (홀수) PF = 0 O OF가 1이면 OF = 1 S SF가 1이면 SF = 1 ECXZ ECX가 0이.. 2023. 3. 12.
함수의 사용 함수 시작 위치에서 스택을 확인하면, 스택에 매개변수가 입력된 후에 복귀주소(returnaddress)가 저장되어있다. 함수 시작 코드에는 이후에 EBP값을 저장하고 스택 크기를 변경하는 코드가 이싿. 이 부분을 함수의 프롤로그(prologue)라 한다. 함수 구조는 함수가 시작할 때 수행되는 프롤로그와 함수가 끝날 때 수행되는 에필로그(epilogue)가 있다. 함수 프롤로그와 에필로그는 다음과 같다. 코드 설명 함수 프롤로그 push ebp 이전 함수의 EBP 레지스터 값을 스택에 보관 mov ebp, esp 현재 함수의 EBP 레지스터 값을 새롭게 설정 sub esp, 10 ESP 값을 변경하여 지역변수 공간을 확보 함수 에필로그 leave (mov esp, ebp) ESP 값을 복원하고, (pop.. 2023. 3. 6.
루프 루프에 대한 어셈블리 코드 #include int main(void) { inti, n, num; sum = 0; for (i = 1; i 2023. 3. 6.
어셈블리어 명령어 (1) 데이터 이동 명령어 (mov) mov dst, src mov 명령 설명 mov eax, ebx EBX레지스터 내의 값을 EAX 레지스터로 복사 mov eax, 0x42 값 0x42를 EAX 레지스터로 복사 mov eax, [0x4037c4] 메모리 주소 0x4037C4에 있는 4바이트 값을 EAX레지스터로 복사 mov eax, [ebx] EBX 레지스터가 명시한 메모리 주소의 4바이트 값을 EAX 레지스터로 복사 mov eax, [ebx+esi*4] EBX+ESI*4 연산 결과가 명시한 메모리 주소의 4바이트 값을 EAX레지스터로 복사 데이터 이동 명령어 (lea) lea des, src 메모리 주소를 목적지에 넣을 때 사용한다. lea는 주소를 저장하는데 사용하고, mov는 값을 저장하는데 사용한다. .. 2023. 3. 4.
반응형