① CMP 비교합니다.
CMP reg, reg CMP mem, reg CMP reg, mem CMP reg, imm CMP mem, imm #include <stdio.h> int main( int argc, char* argv[] ) __asm printf( "%d\n", nValue ); return 0; 5와 5를 비교하면 같으므로 ZF = 1, CF = 0 이 나옵니다.
② JMP 지정된 위치로 이동합니다. C에서 goto문이랑 비슷합니다. JMP label JMP reg16 JMP mem16 JMP mem32 #include <stdio.h> int main( int argc, char* argv[] ) __asm
L1: printf( "%d\n", nValue ); return 0; 결과 L1으로 이동하므로 MOV nValue, 0x0A는 실행되지 않습니다.
③ 조건 점프 명령 조건이 있는 점프 명령어들이 있습니다.
#include <stdio.h> int main( int argc, char* argv[] ) __asm JA DestBig //nValue가 클 때 JE DestSame //nValue가 같을 때 switch(1) puts(pszResult);
결과
④ CALL 함수를 콜합니다. #include <stdio.h> int Sum(void); int main( int argc, char* argv[] ) printf( "계산 전 : %d\n", nResult ); __asm printf( "계산 후 : %d\n", nResult ); return 0; int Sum(void) printf( "sum 함수 call\n" ); return nValue1 + nValue2; 결과 반환 값은 EAX에 대입됩니다.
⑤ RET ESP 레지스터가 가르키는 값을 EIP 레지스터에 저장 RET imm8 #include <stdio.h> int Sum(void); int main( int argc, char* argv[] ) return 0;
⑥ NOP 아무 동작도 수행하지 않는 명령어입니다. #include <stdio.h> int main( int argc, char* argv[] ) return 0; NOP을 이용한 버퍼오버플로우때 공부했었죠.
출처 : I2Sec http://blog.naver.com/shw20319/20138513661 |
'프로그래밍(Programming) > 어셈블리어(asm)' 카테고리의 다른 글
어셈블리어단에서의 스텍프레임과 함수 호출 call, ret, ebp, esp, eip (0) | 2017.02.26 |
---|---|
loop 명령어 조건 정리 ECX (0) | 2017.02.25 |
상태 레지스터 플래그 (0) | 2017.02.24 |
_asm {점프 할때의 플래그들 정리} (0) | 2017.02.21 |
cmp 에 의한 점프 명령어와 플래그 jmp, je==jz, ja, jb, jna, jnb, jbe , 비트 플래그 (0) | 2017.02.21 |