[리버싱] 어셈블리어 정리
레퍼런스/Reversing 2014. 5. 13. 15:47 |REP = 다음에 나오는 명령어를 ECX 만큼 반복해서 수행
REPNE, REPNZ = Zero Flag 가 0이 아니며 ECX 만큼 수행. Zero Flag가 0이되면 빠져나옴. (Zero Flag != 0 , ECX > 0 )
REPE, REPZ = Zero Flag 0 일 경우 ECX만큼 수행. Zero Flag 가 설정되면 빠져나옴. (Zero Flag == 0, ECX > 0)
STOS = AX의 값을 EDI 주소에 저장
SCAS = AX의 값과 EDI 주소에 있는 값과 비교
SCASB = SCAS 를 byte 단위로 비교
SCASW = SCAS 를 word 단위로 비교
SCASD = SCAS 를 DWORD 단위로 비교
LODS = ESI 가 가리키는 메모리의 값을 읽어 EAX로 복사 (STOS와 같이 b,w,d 의 단위 연산자가 있음)
LOOPD = ECX만큼 피연산자의 주소로 goto 하는 명령
ROL = 왼쪽으로 shift(<<) 명령 최상위 비트가 오른쪽 끝으로 이동
SHR = 왼쪽으로 shift(<<) 명령 최상위 비트가 CF 로 이동
LODSB/LODSW/LODSD (Load String Byte/Word/Double) 바이트/워드/더블워드의 자료를 esi가르키는 곳으로 부터 읽어와서 al/ax /eax 레지스터에 전송시킨다. 전송된 후 esi는 다음번 문자열 요소를 가르 키도록 갱신되는 데, df이 0이면 1/2/4만큼 증가되고, df가 1이면 1/2/4 만큼 감소된다.
----JMP----
JL(Jump if Less) = (SF!=0F) 비교 결과가 작으면 점프.
JLE(Jump if Less or Equal) = (ZF=1 or SF!=0F) 비교 결과가 작거나 같으면 점프.
JNE(Jump if Not Equa) = (ZF=0) 비교 결과가 다르면 점프.
JNB(Jump if Not Below) = (CF=0) 비교 결과가 크거나 같으면 점프.
JBE(Jump if (unsigned) below or Equal) CF=1 or ZF=1
JB(Jump if Below) = (a < b) 뒤의 피연산자의 값이 클 경우 점프
JA(Jump if Above) = (a > b) 앞의 피연산자의 값이 클 경우 점프 (CF=0 and ZF=0)
JG(Jump if Greater) = (a > b) 왼쪽 인자의 값이 오른쪽 인자의 값보다 크면 점프 (ZF=0 and SF=0F)
----PUSH & POP----
PUSHFD = 플래그 레지스터를 스택에 저장
PUSHAD = 모든 레지스터를 스택에 저장.
POPAD = PUSHAD로 저장된 레지스터를 모두 복원
POPFD = 스택에서 플래그 레지스터 복원
PUSHA,POPA : 16bit 버전
----------------------------
CLI = 인터럽트 플래그를 0으로 만든다. (인터럽트 무시)
STI = 인터럽트 플래그를 1로 만든다. (인터럽트 허용)
'레퍼런스 > Reversing' 카테고리의 다른 글
ADM 64 Linux 호출 규약 (0) | 2018.05.18 |
---|---|
windows7 에서 Session ID가 0인 서비스 프로세스에 DLL Injection이 실패하는 원인 (0) | 2013.10.10 |