반응형
1. main 함수의 인자
- 포인터 배열 : 배열인데 주소를 원소로 하는 배열
- 배열 포인터: 포인터인데 배열을 나타내는 포인터
int main(int argc,char *argc[]);
int main();
int main(int argc,char *argc[]){
printf("%s\n",argv[1]); argv[1]는 주소이다
return 0;
}
argc는 입력된 argument의 갯수를 알려준다
- 어셈블리 코드
[ebp+12]는 포인터 배열의 시작주소
인자값 주소 확인하기
0xbffffb64
char *argv[]-> 0xbffffba4
0xbffffb64
[0xbffffba4]
0xbffffba4 0xbffffba8 0xbffffbac
[0xbffffc9a][0x00000000][ ][ ]
- 인자가 얼마나 들어올지 모르기 때문에 마지막은 0입니다
0xbffffc9a: ./main
[실습]:
#> ./a.out hello
hello
2. 시스템 콜
- 리눅스 시스템 콜
- 윈도우즈: WIN API
커널이 함수형태로 기능을 제공하는것이 시스템 콜(200여개)
모든 리눅스 운영체제의 write systemcall 번호는 4이다
eax,4: 시스템 콜번호
ebx,1:표준 출력
ecx,msg:출력 버퍼 시작주소
edx,5d:출력할 문자열의 길이
int,80h:interupt 번호
int로만 출력할 수 있다.
exit을 이용하여 Segmentation fault (core dumped) 없애기
!유용한 명령어
1. ltrace
-실행 프로그램에서 사용중인 C 라이브러리를 추적
2. strace
- 실행 프로그램에서 사용중인 시스템 콜을 추적
'Security > System' 카테고리의 다른 글
[SYSTEM SECURITY]9.어셈블리(반복문) (0) | 2017.10.24 |
---|---|
[SYSTEM SECURITY]7.어셈블리(비트 연산, 논리연산, 형변환) (0) | 2017.10.20 |
[SYSTEM SECURITY]6.어셈블리 (scanf) (0) | 2017.10.19 |
[SYSTEM SECURITY]5.어셈블리 (사칙연산) (0) | 2017.10.18 |
[SYSTEM SECURITY]4. 어셈블리 명령어(mov , lea) (0) | 2017.10.17 |