Reversing&Write up/Study

[HandRay] Main 함수 parameter, pointer 패턴

Jubil 2018. 1. 12. 16:28
반응형

Main Func Arguments

int argc, char *argv[], char *envp[]


argc - main 함수에 전달되는 인자의 개수

argv - 넣은 문자열의 포인터 배열

envp - 환경 변수



보통 3개의 인자를 넣고 호출하면 main 함수라는 것을 유추할 수 있음.





실행하면 이런 결과가 출력.



OllyDBG에서 main 함수 인자를 전달하려면 Debug -> Arguments에 갑 입력.










Pointer Compiled code Pattern


LEA : Source Operand의 주솟값을 Destination에 저장하라는 의미.

포인터 변수를 사용할 때 주로 사용되는 Assembly 명령어임.

레지스터에 대괄호가 쳐져 있으면 주소를 간접 참조한 값을 의미함.





AND : 두 개의 Operand에서 BOOL AND 연산을 수행하여 결과값을 Destination Operand에 저장.

선택된 비트를 Clear하고 나머지를 유지할 때 사용할 수 있음.



OR : 두 개의 Operand에서 BOOL OR 연산을 수행 후 결과값을 Destination Operand에 저장.

선택된 비트를 Set하고 다른 것을 유지할 때 사용할 수 있음.



XOR : 두 개의 Operand에서 배타적 OR연산을 수행 후 결과값을 Destination Operand에 저장. (하나만 참일 경우 참)

패리티 비트 오류 검출 방식에 사용되기도 한다.



DS : Data Segment

SS : Stack Segment







Stack에 문자열을 쌓는다. 선언 및 초기화를 해주었기 때문에,





4byte씩 6번 초기화 해주고 남은 2byte를 STOS를 이용해서 0으로 다 초기화 해준다.


그리고 0x80 - 0x58을 해주면 배열의 크기 40byte가 나온다.

반응형