리버싱 26

1.7 스택

1. 명령어 PUSH X : ESP/RSP/SP 에서 4혹은 8을 빼고 오퍼랜드의 내용을 ESP/RSP/SP가 가리키는 메모리 주소에 기록한다.(스택 맨 위에 X의 값을 넣는다. -> ESP/RSP/SP가 가리키는 메모리 주소에 기록한다는 말은 이 레지스터들은 스택의 가장 위를 가리키므로 즉 오퍼랜드의 값을 스택에 넣는다는 말이다. PUSH 100 을 실행하기 전 스택 PUSH 100을 실행후 스택 상태 : POP은 ESP/RSP가 가리키는 메모리에서 데이터를 가져와 오퍼랜드에 저장한 후 스택포인터에 4또는 8을 더한다. 의 상태에서 pop eax 명령어를 실행하면, esp가 가리키는 메모리 (스택 가장 위의 메모리)0x18FED8의 값 100을 가져와 eax레지스터에 저장한다. 그 후 ESP/RSP에 ..

1.6 함수 프롤로그와 에필로그

아직 초보라 오류가 있을 수 있습니다! 오류 수정은 언제나 환영입니다. 함수 프롤로그의 예 (32bit) 1 : push ebp 2 : mov ebp, esp 3 : sub esp, X 1행 : ebp레지스터의 값을 스택에 저장한다. 2행 : ebp레지스터의 값을 esp의 값으로 설정 3행 : 지역변수용 스택 공간 할당 이때 ebp는 지역 변수나 인자에 접근할 때 사용한다. 함수 에필로그의 예 (32bit) mov esp, ebp pop ebp ret 0 는 아마 밑의 작동방식으로 이해하면 될 것 같다. 예전에 대체 이게 뭐 하는 거지? 했는데 직접 스택을 그려보면서 이해하니 이해가 쉽다.

1장 1.4 리턴값 x86

주의 : 혼자 공부중이여서 틀린 내용이 있을수도 있습니다. 그럴 경우에 언제든지 말씀해주세요! 예제1 C코드 어셈블리1 코드 2~3행 : 함수의 프롤로그이다. 원래 sub esp, ? 가 되어야 하는데, main함수에는 변수가 없기 때문에 없는듯 하다. 4행 : eax레지스터에 리턴값 10을 저장한다. 이건 리턴값을 저장하기 위해 수행된다. 5행 ~ 6행 : 함수의 에필로그이다. ret 명령어는 함수 호출자로 리턴값을 리턴한다.

"리버싱 공부 방법" 2021 번역 & 요약

외국의 어떤 분께서 최신 버전으로 잘 설명해 주신 글이 인상 깊어서 간단히 내용을 요약해 보았다. 모든 내용을 번역한 것이 아니므로 빠진 내용이 있더라도 양해 바란다. 대부분 나의 뇌피셜 번역이라 오류가 많을 수 있다. 원본 글 : https://habr.com/en/post/548344/ How to Start Reverse Engineering in 2021 Reverse engineering might seem so complex, that not everyone has the bravery required to tackle it. But is it really that hard? Today we are gonna dive into the process of learning how to revers..

리버싱 2021.08.22