System Hacking (18) 썸네일형 리스트형 정보보안5 (12) - main함수의 인자 1. main 함수 1의 인자 - 포인터 배열 : 배열인데 주소를 원소로 하는 배열 - 배열 포인터 : 포인터인데 배열을 나타내는 int main( int argc, char *argv[] ) // 포인터 배열 { printf("%s \n", argv[1] ) // argv[1]는 주소가 들어있다. return 0; }; 메인함수도 하나의 함수이기 때문에 push ebp mov ebp, esp ebp + 4 에는 eip ebp + 8 에는 int argc ebp + 12에는 char *argv[]가 있다. 밑의 예제는 ebp + 8 즉 argc(인자의 개수를 표현)를 확인 할 수 있다. (인자의 개수에는 파일의 이름도 포함되어있다.) [실습] argv의 첫번째 요소에는 시행파일이름이, 다음부터는 main.. 정보보안5 (10,11) - call, 스택메모리의 함수표현 1. call & jmp 명령의 차이 - 공통점 : 해당 주소의 명령을 실행한다. ( 해당 주소를 eip 레지스터에 저장 ) ! cpu 는 eip 레지스터를 통해 실행할 명령어를 찾는다. - 차이점 : jmp 명령어는 해당 주소로 바로 이동하지만, call 명령어는 스택에 데이터를 저장하고 이동한다. (call명령어는 복귀할 주소를 저장한다!) 아래 예제는 다음 c언어 코드를 어셈블리로 표현한 것이다. int sum (int a, int b){ int sum = 0; a + b = sum; return sum; } int main(void) { int a = 10; int b = 20; int sum = 0; sum = sum(a, b); printf("%d \n", sum); return 0; } [ .. 이전 1 2 3 다음