리버스 엔지니어링 0x02

1495 단어
가장 기초적인 어셈블리 명령
자주 사용하는 어셈블리 명령
명령어
예제
속뜻
설명
Mov
Mov EAX,ECX
EAX=ECX
EAX에 ECX 값 저장
ADD
ADD EAX,ECX
EAX+=ECX
ECX 값에 EAX 값 추가
SUB
SUB EAX,ECX
EAX-=ECX
EAX 값을 ECX 값에서 빼기
INC
INC EAX
EAX++
EAX 값 1 더하기
DEC
DEC EAX
EAX–
EAX 값 1 감소
LEA
LEA EAX,[ECX+4]
EAX=ECX+4
ECX+4의 값을 EAX로 내보내기
CMP
CMP EAX,ECX
if(EAX==ECX) ZF=1else ZF=0
두 값을 비교하여 비교한 결과에 따라 EAX가 ECX와 같으면 ZF=1 EAX가 ECX와 같지 않으면 ZF=0
TEST
TEST EAX,EAX
if(EAX==0) ZF=1else ZF=0
값을 0과 비교하여 비교 결과에 따라 EAX가 0이고 ZF=1이 0이 아니면 ZF=0
JE(JZ)
JE 04001000
if(ZF==1) GOTO 04001000
ZF=1이면 04001000으로 건너뛰기
JNE(JNZ)
JNE 04001000
if(ZF==0)GOTO 04001000
ZF=0이면 04001000으로 건너뜁니다.
JMP
JMP 04001000
GOTO 04001000
무조건 04001000으로 점프
CALL
CALL lstrcmpW
lstrcmpW 호출
PUSH
PUSH 00000001
창고에 보관하다
POP
POP EAX
EAX 레지스터에 체크 아웃 및 가져온 값 저장
Notice: 같은 레지스터 두 개가 있는test 명령을 보면 보통 조건 지점으로 레지스터 값이 0이면 ZF=1로 간단하게 이해할 수 있다.
JNZ와 TEST 명령을 결합하면 다음과 같습니다.
test eax,eax
jnz 04001000
  • EAX 값이 0이면 점프
  • EAX 값이 1이면 점프하지 않음
  • 콜 명령은 서브루틴을 호출하는 데 사용되며, 반환 값은 일반적으로 EAX 레지스터에 저장됩니다.서브루틴의 매개 변수는 일반적으로 창고에 저장되고push 명령으로 압축됩니다.매개 변수는 뒤에서 앞의 순서로 압입한다.
    어휘 인코딩을 배우는 데 있어서 나는 이전에 전문적인 블로그를 써서 구체적인 조작과 사용 도구를 설명한 적이 있다.참조:http://blog.csdn.net/chengyu779394084/article/details/50325993

    좋은 웹페이지 즐겨찾기