
이 문제 답이 welcome To aSSemblY WoRld!가 아닌가요? 입력해도 틀렸다면서 넘어가지지 않아요 ㅠㅠ
and 예시에서는
[Register]
eax = 0xffff0000
ebx = 0xcafebabe
[Code]
and eax, ebx
[Result]
eax = 0xcafe0000
결과가 ffff 대신에 cafe로 나오고
or 예시에서는
[Register]
eax = 0xffff0000
ebx = 0xcafebabe
[Code]
or eax, ebx
[Result]
eax = 0xffffbabe
결과가 cafe 대신에 ffff 가 나오는데 이유가 무엇인가요
x86 Assembly🤖: Essential Part(1)
QWORD PTR [0x8048000]
0x8048000의 데이터를 8바이트만큼 참조
DWORD PTR [0x8048000]
0x8048000의 데이터를 4바이트만큼 참조
WORD PTR [rax]
rax가 가르키는 주소에서 데이터를 2바이트 만큼 참조
라고 하는데 몇 바이트 만큼 참조한다는 것이 무슨 뜻인가요?
감사합니다.

다음과 같은 사진을 gdb로 분석할 때가 많은데
왜 메모리 주소 간격이 0x0000000000000008씩 늘어나는지 궁금합니다.
평상시에 메모리 간격 같은 건 딱히 의식하지 않고 리버싱 및 포너블 문제들을 풀어왔던 것 같은데
생각해보니 이제껏 리버싱을 했던 파일들을 보면 꼭 메모리주소 간격이 0x0000000000000008이 아닐 때도 있더라고요
운영체제 가상메모리 같은 것을 공부할 때는 메모리주소를 그냥 1씩 증가하는 식으로의 예제만 접했던 것 같고 무언가 이유가 있던 것 같은데 딱히 기억나지 않네요
산술 연산이나 다른 여러가지 문제를 풀때 필요한
기본지식을 알려주실 수 있나요
메모리값 끼리 더한다든가 차근차근히 어떻게 푸는지요
2진수로 바꿔야하는건가요?
그리고 산술연산에서
[rbx+rcx*8] 이 왜 0x03 인지 알려주세요
rbx = 0x555555554000
rcs = 0x2
[Register]
rax = 0x35014541
rbx = 0xdeadbeef
==================================
[Code]
1: xor rax, rbx
2: xor rax, rbx
3: not eax
에서 1번까지 실행했을때의 문제에서
0x35014541과 0xdeadbeef를 2진수로 변환하면 각각
110101000000010100010101000001
11011110101011011011111011101111 가 나오는데
여기서 xor을 어떻게 대입해야 할까요
남는 자리수를 없애거나, 1로 대입 혹은 0으로 대입하는 등
여러 방식으로 대입해도 답과는 다른 답이 나오고 있어서 어디부터 잘못되었는지 모르겠습니다
add rax, [rbx+rcx*8] 이라면
0x555555554000 + 0x2*8 = 0x555555554000 + 10
으로 해서 0x555555554010이 되니, 1번 예제의 1번 코드는 답이 0x3이 아닌가요..?
그런데, 답은 0x3133A라고 나와서요 ㅠㅠ
풀이과정이 어떻게 되는 건가요..?
안녕하세요. 이번에 해킹에 처음으로 입문을 하게된 IT학과 학생입니다. 다른 것이 아니고 강의 도중에 어셈블리와 각종 레지스터 종류 별로 로드맵안에 있던데 제가 제가 학교에서 2년전에 들었었지만 컴퓨터 아키텍쳐나 어샘블리 레지스터 내용을 뭘 말할려는 지는 알겠습니다.
현재 로드맵에서 어셈블리와 컴퓨터구조와 같은 과목을 파면 정말 있는 내용보다 깊게 들어가게 되는데 현재 시스템 해킹을 위해서는 현재 로드맵 안에 있는 내용 위주로만 봐도 괜찮은 거죠??
[Register]
rax = 0x31337
rbx = 0x555555554000
rcx = 0x2
==================================
[Code]
1: add rax, [rbx+rcx\*8]
2: add rcx, 2
3: sub rax, [rbx+rcx\*8]
2번에서 rcx에 2를 더한다는 말인데 ***0x2에 2를 어떻게 더하면 되는건가요***
그냥 간단하게 0x4라고 생각해도 되는 건가요?
3번 [rbx+rcx*8]에서 ***8 이게 무슨 말인지 전혀 모르겠**어요 곱하기 인가요....?
숫자를 모두 16진수로 바꾼 다음에 생각해 봐야 하는 걸까요?
정말 아무리 생각해보고 구글링 해도 *8 이건 나오질 않아 질문글 올려봅니다....
레지스터, 메모리 및 코드가 다음과 같을 때, 아래에서 적절한 값을 채우시오.
[Register]
rax = 0xffffffff00000000
rbx = 0x00000000ffffffff
rcx = 0x123456789abcdef0
==================================
[Code]
1: and rax, rcx
2: and rbx, rcx
3: or rax, rbx
1번. Code를 1까지 실행했을 때, rax에 저장된 값은
0x1234567800000000
이다.
2번. Code를 2까지 실행했을 때, rbx에 저장된 값은
0x000000009abcdef0
이다.
3번. Code를 3까지 실행했을 때, rax에 저장된 값은
0x123456789abcdef0
이다.
여기서 문제 3번에서 or 연산자를 쓰는데 둘다 1이니깐, ffffffff 아닌가요? 왜 답이 저렇게 나오나요?
```
[Register]
eax = 0xffff0000
ebx = 0xcafebabe
[Code]
and eax, ebx
[Result]
eax = 0xcafe0000
```
와
```
[Register]
eax = 0xffff0000
ebx = 0xcafebabe
[Code]
or eax, ebx
[Result]
eax = 0xffffbabe
```
의 어셈블리어 코드에서 eax의 f들은 무슨 역할을 하고 있는지 궁금합니다.
and연산에서는 cafe가 ffff 대신에 써져있고,
or 연산에서는 ffff가 cafe 대신에 연산의 결과로 써져있는데 무슨 규칙이 있는건가요?