본문 바로가기

CAT-Security/미분류

argc와 argv의 이해

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]
0                             0x4                           0x8                           0xc                            0xf


그리고 이게 gdb로 분석해본 argc와 argv의 모습이다. 헐 뽷!
 ebp  ret argc  argv[0]  argv[1] 
0                             0x4                           0x8                           0xc                            0xf





이건 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