강의 설명

본 코스에서는 다음의 내용을 설명합니다.

  • 어셈블리어란?
  • x86-64 어셈블리어
  • 데이터 이동: mov, lea
  • 산술 연산: add, sub, inc, dec
  • 논리 연산: and, or, xor, not
  • 비교: cmp, test
  • 분기: jmp, je, jg
강의 목표
어셈블리어에 대한 간략한 이해
이 강의와 관련된 질문들입니다.
16개의 질문
자바스크립트에서 비트연산 사용시
자바스크립트 콘솔창에서 0xffff0000과 0xcafebabe를 AND 연산하려고 합니다. > 0xffff0000 & 0xcafebabe -889323520 > (-889323520).toString(16) '-35020000' AND 연산 수행 후 연산 결과를 16진수로 변환하였을 때 제가 원하는 결과는 0xcafe0000 입니다. 왜 이런 잘못된 결과가 발생하나요? 구글에 어떻게 검색해야 할까요?
#리버싱
#배경지식
마지막 문제
1바이트씩 가르키니 0x400000 은 0x67을 가리키고 0x400001은 0x55를 가리킨다고 이해했는데 제가 이해한 데로면 0x400008은 0x44이고 0x400010은 0x10인데 11번째 줄에서 0x400010은 0x52를 가리키는데 이렇게 되면 0x400010이 가지고 있는 값은 2개가 되는 건가요? 이 부분이 이해가 안 갑니다.
#리버싱
#배경지식
xor 질문
xor이 무엇을 출력하는지 잘 모르겠어요
#리버싱
#배경지식
문제의 오타인가요? 아님 제가 잘못 생각한건가요?
리버싱 x86-64 어셈블리 명령어 >Opcode: 산술연산 부분에서 문제를 푸는데 1: add rax, [rbx+rcx8] // 8이 아니라 5아닌가요? 2: add rcx, 2 3: sub rax, [rbx+rcx8] // 8이 아니라 5아닌가요? 4: inc rax 원래는 5인데, 8로 오타가 난건가요?. 아니면 제가 잘못 이해한건가요? 아무리 봐도 오타인거 같습니다…
#add연산자
산술 연산자 문제에 관한 질문
``` [Register] rax = 0x31337 rbx = 0x555555554000 rcx = 0x2 ================================= [Memory] 0x555555554000| 0x0000000000000000 0x555555554008| 0x0000000000000001 0x555555554010| 0x0000000000000003 0x555555554018| 0x0000000000000005 0x555555554020| 0x000000000003133A ================================== [Code] 1: add rax, [rbx+rcx*8] 2: add rcx, 2 3: sub rax, [rbx+rcx*8] 4: inc rax ``` 이 코드에서 sub rax, [rbx+rcx*8]를 rcx에 8을 곱해서 16이 되고 rbx를 더하는 것이라고 이해를 했는데 연습 문제를 풀어보니 예상치도 못한 풀이가 나왔습니다. 저것이 왜 0x10인지 알려주실 수 있을까요?
#리버싱
#배경지식
마지막 질문 1번 코드 피연산자 관련 질문
1. mov dl, BYTE PTR[rsi+rcx]는 '주소인 BYTE PTR[rsi+rcx]'의 값을 dl에 대입하라는 명령어 맞나요? 2. BYTE PTR[rsi+rcx]는 '주소인 rsi+rcx'의 값을 1바이트 만큼 참조하라는 명령어 맞나요? 맞다면 참조가 무엇이고 rsi+rcx인 0x400000의 값 중에 무엇을 참조하라는 건가요.. 제 머리로는 답이 안 나올 것 같네요
#리버싱
#배경지식
논리연산 수행되는 영역 질문
예문에서는 레지스터에 저장된 값끼리만 논리연산이되게 되어있는데 1. 메모리에 저장된 값을 지정하려면 연산식을 어떻게 써야할지 2. 메모리에 저장된 값끼리 논리연산 가능한지?
#리버싱
#배경지식
메모리 산술연산 도중 음수 결과값
산술연산시에 메모리 주소내의 값이 음수로 변환된다면 어떻게 표시되나요?
#리버싱
#배경지식
코스 마지막 문제 관련 질문입니다.
0x400018 | 0x54 0x11 0x00 0x00 0x00 0x00 0x00 0x00. 여기에서 0x00이 xor dl, 0x30를 만나면 0x00 = 00000000 0x30 = 00110000 xor 00110000 이렇게 계산이 되는 걸로 알고 있습니다. 그러면 아스키 테이블에서 00110000이 숫자 0이라고 되어 있는데 마지막 변환되는 값이 Welcome to assembly world!000000 이 되어야 하는 것이 아닌지 궁금합니다.
#리버싱
#배경지식
산술 연산 문제 중 메모리 계산 관련 질문입니다.
1: add rax, [rbx+rcx*8] 가 rax레지스터에 [rbx + rcx*8]의 값을 더한다는 것은 알겠습니다만, 제가 16진수 계산 방법을 잘못 알고있는것인지 rbx = 0x555555554000 rcx * 8 = 0x16이므로 rbx + rcx*8 = 0x555555554016이라고 생각하였고, 이제 rax의 값에 이 값을 더해야 한다고 생각했습니다만 이렇게 계산하는 것이 맞는지 확신이 없고 답이 이와 관련된 게 전혀 없으니 잘못 계산한 것으로 보입니다. 어느 부분에서 계산이 잘못되었고 어떻게 계산해야 올바른지 알고 싶습니다.
#리버싱
#배경지식
어셈블리 처음인데
강의내용만 보고는 예제조차도 접근하기가 어렵네요.. 너무 설명이 부족합니다..
#리버싱
#배경지식
논리연산 not 3번 예제 질문있습니다.
3번 예제에서 not eax연산에 대한 답이 rax = 0xcafebabe인 이유가 무엇인가요? eax는 32비트 레지스터니까 기존 rax = 0x35014541 에서 하위 32비트인 4541만 not 연산을 진행하여 rax = 0x3501babe 가 되어야 하는게 아닌가요?
#리버싱
#배경지식
초보라서 이해가 잘 되지 않습니다
둘 중 하나라도 1이면 1이고 아니면 0이라는게 숫자가 있고 없고를 자리마다 비교하는건가요? 1이면 결과값은 어떻게 나와야하나요? 궁금해서 잠도 못 잘 것 같습니다
#리버싱
#배경지식
코스 마지막 문제에서
2번째 바퀴(rcx = 1일 때)에서 rsi + rcx = 0x400001이 될 것으로 예상하는데 0x55가 dl에 저장되는 것이 아니라 0x88이 되는 것 아닌지 궁금합니다. 0x55 0x10 = (0101 0101 0001 0000)(2) 0101 010/1 0001 000/0 (1000 1000)(2) = 0x88
#리버싱
#배경지식
not연산 결과가 다릅니다.
rax를 not연산 하면 0x0이 되는데, 왜 답은 0xcafebabe인가요?
#리버싱
#배경지식
비트연산 어떻게 하나요.
저거 16진법으로 표기되어 있는데 죄다 2진법으로 치환해서 해야 하는 건가요?
#리버싱
#배경지식
강의 평점
0.0★ (0)
0
x86 Assembly🤖: Essential Part(1)
0.0★ (0)
Free
상세정보
약 1 hour 소요
쉬운 난이도
없음