자주 까먹거나 햇갈리는 명령어들을 정리했다.
JNZ => zero flag가 0일 때 점프한다.
JZ => 반대로 zero flag가 0이 아닐 때 점프한다.
ADD a,b => a와 b를 더해서 a에 넣는다.
SUB a,b => a와 b를 빼서 a에 넣는다.
INC a => a를 1 증가시킨다.
DEC a => a를 1 감소시킨다. (DEC의 대상이 0이 되면 Zero flag를 1로 설정한다.)
SAR a,1 => a를 2번쨰 인자만큼(1만큼) 오른쪽으로 이동시킨다.
a가 만약에 16진수로 6c라면,
2진수로는 01101100 이고 1들을 다 오른쪽으로 1칸씩 밀면
00110110이 된다. 이것은 16진수로 39가 되고 10진수로는 54가 된다.
어셈블리어에는 곱셈이 2가지가 있는데 하나는 부호가 없는 곱셈인 MUL과 부호가 있는 곱셈인 IMUL이 있다.
JE a,b => a와 b의 값이 같으면 점프하고
JNE a,b => a와 b의 값이 다르면 점프한다.
그리고 JMP는 그냥 점프이다.
TEST a,a => a와 a를 and 연산한다. 0이면 ZF를 1로 셋팅한다.
ZF(zero flag) : 이전 명령어가 거짓이면(이전 연산결과의 값이 0이면) ZF를 1로 설정
이전 명령어가 참이라면(이전 연산결과의 값이 0이 아니면) ZF를 0으로 설정
'Hacking&Security > Reversing' 카테고리의 다른 글
리버싱_간단한 기초지식_by $0u1Tr33 (0) | 2019.10.10 |
---|