기본개념 22

[ARM Aseembly basics Part 1 to 7] - v1.0

WritingShellcode 부터 바로 따라하려다 명령어에 막혀서 Basics를 다시 됨. 쉘코드 직접짜는 것도 빡센 작업... 기초부분도 다시 볼게 너무 많으며 x86과 다른 점을 유심히 봐야겠다. LDR과 STR - LDR과 STR (Source와 Destination의 위치가 반대임) ldr r2, [r0] 메모리 r0에서 레지스터 r2로 값 불러오기 str r2, [r1] 레지스터 r2의 값을 메모리 r1에 저장하기 - ARM은 사용되는 모드에 따라 실제 PC의 유효주소가 다름.(항상 다음 명령어 위치를 가리키는 x86과 다른 점) ldr r0, [pc, #12] ->여기서 사용되는 pc의 실제 유효주소는 현재 위치에서 다다음 명령어가 유효주소임 유효주소부터 오프셋+12를 더한 값이 [pc, #..

기본개념 2019.12.25

CMP와 TEST 비교

CMP : 첫 번째 Operand에서 두 번째 Operand를 뺍니다. 이 연산의 결과는 ZF, Zero Flag에만 영향을 미칠 뿐 Operand에 영향을 미치지 않고 버려집니다. TEST : 첫 번째 Operand와 두 번째 Operand를 AND 시킵니다 이 연산의 결과는 ZF에만 영향을 미치고 Operand에 영향을 미치지 않고 버려집니다. 결국 한 쪽은 빼기, 한 쪽은 AND인데 이 것으로 인해서 CMP는 두 Operand가 완전히 같은지 판단할 수 있고 TEST는 두 Operand가 모두 0인지 아닌지 판단할 수 있습니다. (만약 결과가 0이라면 ZF는 1로, 아니라면 0으로 설정된다.) TEST의 경우에는 두 Operand가 0이 아닌 경우를 제외하고는 값을 단정지을 수 없기 때문에(두 값이..

기본개념 2019.12.24