본문 바로가기

reverseing3

[리버스 엔지니어링] 함수 호출 규약 정리 함수 호출 규약이란?- 함수를 호출하는 방식에 대한 약속을 의미합니다.- 인자를 전달하는 방식과 함수 종료시 스택 공간을 정리하는 방법에 따라 달라집니다. cdecl- 인자 전달 순서 : 오른쪽에서 왼쪽- 인자 전달 매체 : 스택- Stack Frame 정리 : Caller호출한 main()에서 스택을 정리하는걸 확인 할 수 있습니다. C/C++에서의 표준 함수 호출규약으로, Caller가 인자를 정리하는 규약이며 가변인자를 사용할 수 있습니다.(printf와 같이 긴 인자를 사용할 수 있습니다.) stdcall- 인자 전달 순서 : 오른쪽에서 왼쪽- 인자 전달 매체 : 스택- Stack Frame 정리 : Callee호출당한 add()에서 스택을 정리하는걸 확인 할 수 있습니다.return 8을 통해 .. 2018. 11. 14.
[리버스 엔지니어링] CPU 레지스터 레지스터 : CPU 내부에 존재하는 다목적 저장공간 vs 일반적인 메모리(RAM) : 레지스터가 속도가 훨씬 빠르다. 레지스터를 알아야 하는 이유 어셈블리어의 대부분이 레지스터를 조작하는 것이기에 레지스터의 용도의 내용을 이해 해야한다. 가장 기초가 되는 Register = Basic program execution registers General Purpose Register (32bit - 8개) Segment Register (16Bit - 6개) Program Status and Control Register (32Bit - 1개) Instruction Pointer(32Bit - 1개) General Purpose Register EAX : Accumulator for operands and r.. 2018. 11. 14.
[리버스 엔지니어링] 바이트 오더링 컴퓨터에서 메모리에 데이터를 저장하는 방식을 의미하는 바이트 오더링의 리틀 엔디언 표기법과 빅엔디언 표기법에 대해서 알아보겠습니다. 우선 바이트 오더링이란? 데이터가 바이트 단위로 메모리에 저장되는 순서를 의미하며 각 CPU 벤더 의존적인 특징을 가지고 있다. 바이트 오더링의 종류에는 크게 리틀 엔디엔 표기법과 빅 엔디언 표기법이 존재합니다. 위 그림를 보시면 쉽게 이해하실수 있으실겁니다. 바이트 타입의 변수에 저장할 경우 두 방식의 차이는 없습니다. 하지만 2바이트 이상의 크기를 가진 자료형을 저장할 때부터 차이가 나타납니다. 빅 엔디언 방식은 데이터를 저장할 때 사람이 보는 방식과 동일하게 앞에서부터 순차적으로 저장합니다. 그러나 리틀 엔디엔 방식은 데이터를 저장할 때 역순으로 저장하는 것입니다. 리.. 2018. 10. 31.
반응형