전체 글 205

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

Sydney

리틀엔디안 방식과 오프셋 사용에 대한 이해가 필요했음. 알고보면 쉬운 문제! Key point 1.리틀엔디안 방식은 디스에셈블러와 사용자가 입력한 값과 반대로 표기됨 디스어셈블러메모리 저장된 값(=사용자 입력 값) 디스어셈블러상 0xABCDEFGH => 메모리 덤프에서는 0xBADCFEHG 로 표기됨 2. 오프셋 사용 cmp #0x454e, 0x0(r15) r15레지스터에 저장된 주소부터 오프셋 0의 위치의 값부터 상수 0x454e를 비교함 cmp #0x2e5d, 0x2(r15) r15레지스터에 저장된 주소부터 오프셋 2의 위치의 값부터 상수 0x2e5d를 비교

New Orleans

비기너를 위한 CTF인데 너무 어렵게 생각했다....알고보면 정말 단순한 문제! 하지만 삽질을 통해 어셈블리어 및 디버거 사용에 조금 익숙해졌다. Key 포인트 정리3 0024 fa23 3150 9cff b012 7e44 1.#이 붙으면 상수로 사용, #이 없으면 메모리에 저장된 값을 사용한다. 2.@이 붙으면 레지스터에 저장된 주소가 가리키는 값을 사용한다. (레지스터 앞에 붙는 듯) 3.연사자 뒤에 .b가 붙으면 한바이트만 연산한다는 의미 2.메모리 덤프 offset 위치: 순서 그대로 왼쪽에서 오른쪽으로 읽으면 됨. 4400 4401 4402 4404 4400: 31 40 00 44 mov #0x2400, r15 r15에 상수 0x2400을 복사함. mov.b #0x23, 0x0(r15) r15의 ..