argc는 인자 개수의 값이고
argv는 인자 값이다.
argv[1]
0x0804833b <main+19>: mov 0xc(%ebp),%eax
0x0804833e <main+22>: add $0x4,%eax
0x08048341 <main+25>: pushl (%eax)
0x08048343 <main+27>: pushl 0x8(%ebp)
0x08048346 <main+30>: push $0x8048404
0x08048348 <main+35>: call 0x8048268 <printf>
argv[0]
0x0804833b <main+19>: mov 0xc(%ebp),%eax
0x0804833e <main+22>: pushl (%eax)
0x08048340 <main+24>: pushl 0x8(%ebp)
0x08048343 <main+27>: push $0x8048400
0x08048348 <main+32>: call 0x8048268 <printf>
두개의 차이점은 바로 argv[0]과 argv[1]이다.
0x0804833e <main+22>: add $0x4,%eax 바로 이게 있고 없고의 차이다.
으엌..이런 차이가 있었다니..
argv[2]같은경우 $0x8이다.
!!! 헣 내가 알고있던 argv와 좀 다르다!?
기본적으로 0x0804833b <main+19>: mov 0xc(%ebp),%eax
이런식의 연산후에 argv[1]같은경우 add $0x4를 해서 pushl하고
argv[2]같은경우 add$0x8을 해서 pushl 하는것이다.
ebp에서 c만큼 떨어진곳 (+12)이 argv[1]이고, 8개 만큼 떨어져 있는곳이 바로 argc이다.
도식으로 그리자면 이렇게 된다. 라고 쓸뻔했다.
이게바로 여태까지 내가 알고 있던 도식이다.
ebp | argc | argv[0] | argv[1] | argv[2] |
그리고 이게 gdb로 분석해본 argc와 argv의 모습이다. 헐 뽷!
ebp | ret | argc | argv[0] | argv[1] |
이건 argv[1~10]을 한번 쳐본것이다. 환경변수가 나오네요.
'CAT-Security > 미분류' 카테고리의 다른 글
[Hack-Me] View Sourcecode(100) (0) | 2012.02.26 |
---|---|
[Hack-Me] All Roads Lead to Rome(100) (3) | 2012.02.26 |
net reflector 강좌 (0) | 2012.02.24 |
codegate MIS 1번문제 (0) | 2012.02.24 |
shellcode 만들기 (0) | 2012.02.24 |