현재 버퍼오버플로우를 공부하기 위해서 와우해커의 달고나님이 작성하신 문서를 읽고 있습니다.
그런데 읽다보니까 헷갈리는 점이 있어 여쭤 봅니다.
1. 만약 A라는 시스템이 리틀 엔디언 방식을 사용한다면, 0x12345678은 0x78563412이런식으로 저장되는 거잖아요, 그렇다면 jmp나 call명령어를 이용해 0x12345678로 이동할때에도
jmp 78563412 call 78563412 이런식으로 해야되는건가요?
2. 레지스터에 값을 저장해 줄 때도 바이트 오더에 맞추어서 표기해 주어야 하는 건가요?
3. add,sub등의 명령어를 사용할 때도 12345678을 더하거나 빼려 한다면 78563412같이 표기를 해야 되는 건가요?
Hit : 3826 Date : 2015/01/23 11:44
sametim
1. JMP나 CALL 할때에는 RVA의 주소이기 때문에 상관 없는걸로 압니다.
2. 레지스터에 값을 저장할때 도 RVA주소.
3. 78563412로 저장되면 불러올때도 12345678로 불러오기 때문에 그대로 써줘야합니다
2015/01/23
sametim
확실하진 않으니 구글 검색도 해보시고 여러 방면으로 조사해 보시면 확실한 답을 얻을 수 있을 겁니다
2015/01/23
h@cking2013
감사합니다!
2015/01/24
s2kies
메모리에 직접 바이너리를 쑤셔 넣을때만 바이트 오더링 지켜주면 된다. 라고 생각하시는게 편하겠네요.
저는 그렇게 이해하고 있었습니다 쭉.