완료됨
Quiz: x86 Assembly 2 문제에 대한 질문입니다

https://dreamhack.io/learn/quiz/25

해당 문제를 보고 나름대로 해석해봤는데,
마지막 부분을 잘 모르겠습니다..

`push rbp
rbp 생성

mov rbp, rsp
rsp = rbp로 초기화

mov esi, 0xf
esi = 0xf

mov rdi, 0x400500
rdi = 0x400500

call 0x400497 <write_n>
write_n 함수로 이동

psuh rbp
rbp 생성

mov rbp, rsp
rsp = rbp로 초기화

mov QWORD PTR [rbp-0x8], rdi
[rbp-0x8] = 0x400500

mov DWORD PTR [rbp-0xc], esi
[rbp-0xc] = 0xf

xor rdx, rdx
rdx = 0

mov edx, DWORD PTR [rbp-0xc]
edx = [rbp-0xc] = 0xf

mov rsi, QWORD PTR [rbp-0x8]
rsi = [rbp-0x8] = 0x400500

mov rdi, 0x1
rdi = 0x1

mov rax, 0x1
rax = 0x1

syscall
-> rax = 0x1이므로 write syscall을 요청
write(rdi, rsi, rdx)
=> write(0x1, 0x400500, 0)
=> 1바이트씩 0x400500주소부터 0개 읽음(?)
`

#리버싱 #배경지식
작성자 정보
더 깊이 있는 답변이 필요할 때
드림핵 팀과 멘토에게 직접 문의해 보세요!
답변 3
avatar
wyv3rn
무플 방지 위원회장

mov edx, DWORD PTR [rbp-0xc]
edx = [rbp-0xc] = 0xf
니까 0xf개 만큼 출력해주겠는데요? ㅎㅎ

2023.07.12. 21:30
avatar
wyv3rn
무플 방지 위원회장

rdx와 edx는 같은 레지스터입니다.
작동 시 다루는 바이트 수만 다른거라서요.

예를들어 레지스터에
0x1122334455667788
이 있을때
push rdx는 저걸 다 넣지만
push edx는
0x88776655
의 4바이트만 넣어주는 차이입니다.

2023.07.13. 05:40
누룽지
대표 업적 없음

혹시 저 syscall 부분에서 왜 rax=0x1이면 write 인지, write 말고 다른 것은 있는지,write(rdi, rsi, rdx)은 write을 쓸 때 그냥 기본적인 형식인건지 궁금한데 알려주실 분 계신가요..?

2023.07.19. 00:36