/etc/sysconfig/network-scripts/ifcfg-etho0 을 열어서 DNS1 = 168.126.63.1을 추가했습니다!

그 뒤에 /etc/resolve.conf 를 열어서 namseserver에 DNS1의 주소를 넣어줬습니다.


168.126.63.1 이란 ? 



다 저장하신후에 service network restart 를 해서 적용을 시킨뒤

yum update 라던가 하던 작업을 진행해보시면 

정삭적으로 진행이 되는것을 볼 수 있습니다!

'시스템' 카테고리의 다른 글

GOT overwrite 예제 1  (0) 2016.06.06
cent os gdb 설치  (0) 2016.05.29
Cent os 에서 xshell , putty 연동  (0) 2016.05.29
cent os 컴파일러(gcc) 다운  (0) 2016.05.28
함수 호출 규약(Calling Convention)  (0) 2016.05.27





안녕하세요! 동아리 리눅스 학습 진행을 위해서 FTZ(Free Training Zone) 접속 방법을 말씀드릴게요! 크게 어려운것은 없습니다!


네이버에 putty를 검색 하시면 이러한 초기 화면이 존재합니다!



자 여기서 Host Name 부분과 Port 부분에 



이렇게 적어서 넣어줍니다! 



그 후에 Window 항목에 Translation 으로 이동하셔서 




Remote character set : UTF-8 이라고 설정이 되어있는데요 


저 부분을 누르시고 맨 아래로 가셔서 Use font encoding 으로 수정해줍니다!


그 뒤 <<메뉴창에서 Session 부문을 다시 누르시고 


Saved Sessions 공백창에 원하시는 이름을 입력하신후 

Save 버튼을 누르시면 위에서 해왓던 설정이 저장이 되어 다시 반복하실 필요가 없게됩니다 . 


그 뒤에는 원하시는 이름으로 만들었던 세션을 더블 클릭 하셔서 실행하시면 됩니다

Format String 이란 

int num = 5;

printf("ABC%d", num); 같은 형태의 코드가 있을 때 %d가 바로 포맷 스트링입니다

보통 프로그래머들이 코딩을 할 때 저런식으로 입력하지않고 편리성을 위해서 

fgets(num , 10 , stdin);

printf(num)

이러한 식으로 입력을 하는 경우가 있는데 만약 저기 num안에 문자열을 넣으면 문자열로 정상적으로 인식하지만 서식문자를 넣었을 경우에는 서식문자로 인식합니다 .

그 후에 넣어진 서식문자를 만나면 메모리의 다음 "4바이트"를 그 서식자의 기능대로 출력하게 됩니다 . 

주로 알려지고 쓰이는 서식문자들의 역할입니다 

%d : 정수형 10진수 상수                   %lf : 실수형 상수(double)
%f : 실수형상수 (float)                      %c :  문자 값 (char)
%s : 문자열                                    %u : 양의 정수 (10진수)
%o: 양의 정수 (8진수)                       %x : 양의 정수 (16진수)
%n:*int(쓰인 총 바이트 수)                 %hn : %n의 반인 2바이트 단위 

자 여기서 서식문자를 만나면 메모리의 다음 "4바이트"를 그 서식자의 기능대로 출력하게 된다고 말씀드렸는데요 과연 여기서 다음 "4 바이트"가 무엇을 의미하는 것일까요 ?

(* 본 소스는 FTZ-LEVEL20의 소스를 예제 삼아서 진행하고 있습니다 .
문제의 풀이를 보기 싫으신분은 다른 글을 참고해주세요!)


fgets 함수를 통해서 printf(bleh)으로 바로 호출하네요

printf로 바로 출력을하면 포맷스트링어택이 가능하게 됩니다 ! 

자 그럼 여기서 아까 말씀드린 다음 4바이트가 뭐인지 설명해드리겠습니다 .

AAAA라는 문자열을 친 후에 %x(양의 정수)라는 서식문자를 사용했습니다!

분명히 %x를 입력했을텐데 지금 나오는 숫자들은 무슨 숫자들일까요 ?

4f를 10진수로 바꾸면? 79입니다 

4212ecc0 은 무슨 뜻일까요 ? 

stdin이라고 뜨는군요! 그렇다면 지금 fgets(bleh,79,stdin) 에서 79와 stdin이 나왔네요?

4207a750 은 무엇을 의미할까요 ? 

strrchr이 나왔네요 ? 의미는 임의의 문자열이 시작되는 위치를 구합니다 .

그리고 마지막으로 41414141은 제가 입력한 A의 아스키코드입니다 

그렇다면 메모리 구조는 

| printf | | size of (bleh) | | stdin | | strrchr | | bleh | | dummy | | sfp | | ret |

이렇게 되잇겠네요!

고로 다음 "4바이트" 가 의미하는것은 | ~ | 공간을 하나씩 출력한다고 보시면 되겠습니다   

자 그럼 이 서식문자를 통해서 공격을 해야되는데요 ! 

여기서 가장 중요한 서식문자 %n을 알아보도록 하겠습니다! 

%n이란 ? %n이라는 서식문자가 나오기 전까지 출력된 값들을 전부 세서 그 다음 메모리주소값에 그 숫자만큼 대입해버리는 서식문자입니다

만약에 AAAA %1111x %x %x %n 를 입력햇을 경우에는 현재 %n의 위치가 원래 41414141이 있던곳입니다 .

고로 AAAA(4) + 공백(1) + %1111x(1111)+ 공백(1) + %x(1) + 공백 (1) + %x(1) + 공백(1) = 4 + 1 + 1111 + 1 + 1 + 1 + 1 = 1120 이므로  0x41414141 = 0x460(1120) 이 됩니다 . 

방금 위에서 설명한거로 알 수 있는것은 %1111x 를 넣었더니 1111만큼 주소값이 증가한것을 확인 할 수 있습니다 .
그렇다면 원하는 흐름의 주소를 알아낸다음에 그 만큼 주소 값을 올려서 원하는 메모리 주소에 덮어 쓸 수 있다면(ex - ret )? 공격이 가능하겠습니다!

먼저 쉘코드를 실행 시키는게 관점이겠습니다 . 본 글에서는 전에 풀이했던 FTZ LEVEL20의 풀이를 가져와서 다시 한번 설명하겠습니다  

먼저 에그쉘을 이용해서 쉘코드를 구했습니다 .

그 다음엔 ret 주소를 구합니다  > 08049598 

자 근데 0xffffffff를 32bit 시스템에서는 받아들일 수 없습니다! 
0xffffff를 10진수로 표현하면 43억 가까이 되기 때문이지요! 그래서 먼저 쉘코드의 주소를 2바이트씩 나눠서 입력하는 방법을 선택해야 합니다 .
bfff / f2cb 이렇게 나누어서 10진수로 바꾼 후 공격하는 것이지요 

근데 쉘 코드를 ret에 넣어줘야 합니다. 그럼 ret에는 2바이트씩 나눠져서 입력을 하기 떄문에 
f2cb 는 08049598 bfff 는 0804959a 에 입력을 해줘야겠습니다! 
(리틀 엔디안 방식을 이용해야 하기 떄문에 낮은자리를 먼저 입력합니다 )

자! 그럼 페이로드를 대충 구성해보죠! 

AAAA\x98\x95\x04\x08AAAA\x9a\x95\x04\x08%8x%8x%8x%f2cb의 10진수%n%bfff의 10진수%n

이렇게 되겠습니다! 

자 여기서 왜 AAAA를 써줘야 하느냐 ? %n 의 위치와 ret의 위치를 맞춰주기 위해서입니다!

서식문자는 4바이트를 참고한다고 햇지요 ? 쉘코드를 각자 나눠서 입력한 서식문자가 AAAA 에 들어가게되고 %n에는 쉘코드의 주소를 넣어놧으니 ret에 들어가도록 하기 위해서입니다! 

%8x를 굳이 쓴 이유가 무엇이냐 ?

| printf | | size of (bleh) | | stdin | | strrchr | | bleh | | dummy | | sfp | | ret |

아까 위에서 이러한 메모리구조를 말씀 드렸습니다 

%8x 를 쓴 이유는 저 메모리의 각 부분들이 각자 8자리만큼 차지하기 때문이고 
%8x를 3번 사용해준 이유는 bleh 부문으로 넘어가게 해서 값들이 정상적으로 ret에 들어가게 하기 위해서입니다 .

자 여기서 이제 f2cb 와 bfff를 10진수로 나타내면 f2cb = 62115 bfff = 49151 이겠습니다.

근데 %n은 여태까지 입력된 자리를 모두 계산한다고 하였지요 ?
AAAA(4)+ ret(4) + AAAA(4) + ret(4) + 8 + 8 + 8 = 40이 되겠습니다

그렇다면 62125 라는 숫자가 되기 위해서는 62125 - 40 = 62085 라는 숫자를 %c에 넣어줘야지 여태까지 나온 숫자값들을 모두 합산해서 62125가 되겠네요!

어라 근데 bfff = 49151 이네요 ? 여태까지 모두 나온 숫자들을 빼줘버리면 음수가 되고 그렇다고 가만히 내비두자니 ret의 주소에 접근할 수가 없습니다.

이럴때 방법은 bfff 앞에 1을 붙이면 1bfff:114687이 됩니다. 

여기서 62125 만큼 빼주면 52562입니다 . 고로 페이로드는 

AAAA\x98\x95\x04\x08AAAA\x9a\x95\x04\x08%8x%8x%8x%62085c%n%52562c%n 이렇게 되겠습니다 .  이렇게 각 쉘코드가 ret의 주소에 들어가게 되고

권한을 취득할 수 있게됩니다 

'시스템 기법 정리' 카테고리의 다른 글

Fake EBP  (0) 2016.06.02
PLT , GOT [상세히] ,GOT Overwrite  (0) 2016.06.02
ASLR를 해제하는 여러가지 방법  (0) 2016.05.29
plt , got , rtl chain , ASLR  (0) 2016.05.28
버퍼 오버플로우 - 2 RTL (개념 정리, 기초)  (0) 2016.05.27


(rtl은 내가 만든 연습용 소스이다!)

ldd명령어( 공유 라이브러리의 주소를 출력(?) ) 을 이용해 주소를 확인해보니 
여기저기로 톡톡 날아다니는것을 알 수 있다 

바로 ASLR 기법이 걸린 상태이다 .

이제 ASLR 기법을 해제하는 방법을 소개하고자 한다 .

첫번째는 /proc/sys/kernel/randomize_va_space 를 조작하는 방법이다

randomize_va_space 는 0 , 1 , 2 의 값을 가진다

0값은 randomize를 해제하는 옵션이고 1 , 2 는 실행하게 하는 옵션이라고 생각하면 된다 그렇다면 randomize_va_space를 훔쳐보도록 하자!

2로 값이 설정되있다 randomize가 실행되고 있다

그렇다면 이 값을 조절해보자! 

그런데 그냥 실행하면 퍼미션 디나이드가 뜬다 

randomize 값을 조절 하려면 root의 권한이 필요하다

echo 0 > /proc/sys/kernel/randomize_va_space 라고 입력해준후에 

randomize의 값을 확인해보니 0으로 변한것을 알 수 있습니다 . 

라이브러리의 주소가 더 이상 변하지않는 것을 확인할 수 있습니다!


두 번째로 소개드릴 방법은 setarch xxxxxx -R 입니다

[xxxxxx 에는 각 리눅스의 버전 ex) linux64 liunx32 i386 등등, 을 적어주시면 됩니다

addr-no-randomize 라고 적혀있네요! 

이 명령어를 실행하면 쉘이 뜨는데요 그 쉘 안에서는 aslr이 풀려있는 상태입니다!

이 명령어는 딱히 권한이 필요 없으므로그나마 이 방법이 가장 좋다고 생각할 수 있습니다! 

쉘이 열렸고 주소 값이 변하지 않는 것을 확인할 수 있습니다 


세번째로 소개 해드릴 방법은 

ulimit -s unlimited 입니다! 

코어덤프와 상당히 유사하지요 ? 스택을 꽈악 채워버려서 주소값이 움직이지 못하도록 합니다! 

다만 32비트에서만 사용이 가능하고 64비트에서는 사용을 못합니다!

yum install gdb

'시스템' 카테고리의 다른 글

GOT overwrite 예제 1  (0) 2016.06.06
Loaded plugins : fastestmirror 에러  (0) 2016.06.01
Cent os 에서 xshell , putty 연동  (0) 2016.05.29
cent os 컴파일러(gcc) 다운  (0) 2016.05.28
함수 호출 규약(Calling Convention)  (0) 2016.05.27

ifconfig 명령어로 확인을 해보면

eth0이 존재하지 않거나 eth0 의 inet addr:127.0.0.1로 나오는등 설정이 되어있지 않은 경우들이 있습니다 .

그렇다면 network 설정을 해줘야 합니다 .

다른 블로그 가보면 포트설정도 하고 이것저것 하는데..

제가 전부 다 시도를 해봤습니다만 먼저 이거 한번 해보세요!

Vmware 메뉴에서 Edit > Virtual Network Editor 항목에 들어가보면 저러한식으로 

vMnet이 있는데 그 중에 vMnet8 Subnet Address (맨 오른쪽)부분에 192.168.127.0

부분이 있습니다 그 중에서 127 즉 3번째 부분의 숫자들을 잘 기억해주세요 

그 후에 vi /etc/sysconfig/network-scripts/ifcfg-eth0 명령어를 입력해줍니다!

바이 편집기로 보시게 되면 저러한식으로 친구들이 잇지요 ? 

다른것들 저 따라하셔도 좋지만 그 중에서 

IPADDR , GATEWAY , NETWORK 부문의 세번째 숫자를 아까 vMnet8 Subnet Address 부분의 3번째 숫자로 넣어줍니다!

그 뒤에 내용을 적용하기 위해서 service network restart 명령어를 사용해줍니다 

그리고 나서 /sbin/ifconfig 명령어를 입력해서 나오는 inet addr의 주소와 port를 입력해주고 실행해주면 됩니다! 

'시스템' 카테고리의 다른 글

Loaded plugins : fastestmirror 에러  (0) 2016.06.01
cent os gdb 설치  (0) 2016.05.29
cent os 컴파일러(gcc) 다운  (0) 2016.05.28
함수 호출 규약(Calling Convention)  (0) 2016.05.27
스택 프레임  (0) 2016.05.27

(* 해당 cent os의 버전은 6.7입니다 다른 버전들도 모두 활용 가능합니다)


cent os (레드햇 리눅스) 에서는 gcc가 기본으로 제공되지 않습니다!

혹시 모르니 gcc -v 명령어를 통해서 깔려있나 확인을 해봅시다! 
제 cent os 에는 깔려있지 않습니다

그렇다면 이제 gcc를 다운 받아 볼까요 

 

yum 명령어를 사용해야합니다! yum 이란 ?

Yellowdog Updater Modified의 약자이고 rpm 기반의 자동 업데이터 , 패키지 설치 / 삭제 도구 입니다!
그냥 설치도구라고 생각하시면 되겠습니다 ㅎㅎㅎ
저 명령어를 치면,,

이러한 식으로 용량과 함께 설치할거냐 안할거냐 묻네요 설치합시다!

gcc는 c와 c++을 나눠서 받아야 하더군요 

아까 과정과 마찬가지로 이번엔 c++을 다운 받읍시다!

y를 눌러주시고 , ,

gcc가 정상적으로 깔려서 young1.c 파일을 컴파일해서 사용하는모습입니다! 


'시스템' 카테고리의 다른 글

cent os gdb 설치  (0) 2016.05.29
Cent os 에서 xshell , putty 연동  (0) 2016.05.29
함수 호출 규약(Calling Convention)  (0) 2016.05.27
스택 프레임  (0) 2016.05.27
쉘과 쉘코드  (0) 2016.05.22

plt - 어떠한 함수들이 있는지 나열되어 있는 테이블
사용자가 만든 함수는plt를 참조할 필요가 없지만 외부 라이브러리에서 가져다가 사용할 경우에는 plt를 참조하게 됩니다

got - 함수들의 주소를 담고 있는 테이블
라이브러리에서 함수를 호출할 때 plt가 got를 참조합니다 .

gdb로 까봣을때 함수 뒤에 plt가 들어가있으면 외부 라이브러리에서 가져온 함수

함수 뒤에 plt가 존재하지않는다면 사용자가 만든 함수 

[gdb로 plt가 붙은 함수가 jmp 하는곳을 x/i 주소 명령어를 통해 확인해보면 got가 있는곳으로 jmp하는 것을 알 수 있다

got에는 함수의 실제 주소를 가리키는것이 아니라 plt+6의 주소를 가리킨다 
이 이유를 이해하기 위해서는 아래 과정을 알아야 한다.

함수를 실행하기 전 

plt address -> got address (jmp plt +6) -> jmp global_offset_table -> _dl_runtime_resolve -> _dl_fixup -> _dl_lookup_symbol_x -> jmp function address

    함수_got -----------------------------------> 함수 실제 주소 


함수를 실행한 후 

plt address -> got address -> jmp function address

이 부분은 https://bpsecblog.wordpress.com/2016/03/09/about_got_plt_2/< 참고 해주세요 

rtl 기법으로는 

DEP와 NX bit가 적용된 스택을 우회하기 위해서 주로 사용됩니다

DEP - 데이터 실행 방지로 스택이나 힙에서의 쉘 코드 실행을 막아주는 보호기법입니다!

NX bit - NX 특성으로 지정된 모든 메모리 구역은 데이터 저장을 위해서만 사용되고 프로세서 명령어가 그 곳에 상주하지 않음으로써 실행되지 않도록 만들어 준다 .
(only 데이터 저장 , 실행x )

RTL chain 

ret로 특정한 함수를 호출하면 (인자 값이 하나인 함수일 경우에) 스태ㅐㄱ의 맨위가 pop ret 주소가 리턴어드레스가 되고 parameter 1이 인자값이된다 그리고 또 ret에 특정 함수를 넣으면 .,..반복 

/-----------/
|   ret1   |
/-----------/
| pop ret |
/-----------/
|  인자1  |
/-----------/
|   ret2   |
/-----------/ 반복 --------

이럴 경우 buf +sfp +ret+"dummy"+parameter 에서 dummy 부분에 exit를 써주는게 안전하다! 


ASLR 이란 ? 
동적 라이브러리의 주소를 프로그램 실행마다 랜덤하게 매핑한다 .
주소값이 프로그램 실행마다 매번 바뀌면 RTL을 위해 System() 함수의 주소를 구하고 싶어도 구하기가 하늘의 별따기입니다 

그러면 이 문제를 어떻게 해결하나 ? 
코어 덤프 할때 쓰던 명령어와 비슷한 명령어를 사용해줍니다
ulimit -s unlimited
ulimit      = 시스템 제한
-s          = 최대 스택 크기 출력
unlimited = 크기에 제한을 두지 않는다.

스택이 더 이상 증가하지 못 할 정도로 증가시켜서 랜덤으로 매핑되게 하는 ASLR기법을 방지합니다

코드영역에는 스택, 힙과는 다르게 고정된 값이 박혀있습니다 

코드영역 0x8048000을 열어본 후 쉽게 아스키코드로 쉽게 파악할 수 있는 값
ex) A - 41을 system 의 인자로 사용합니다 

cp /bin/sh ./A 이러한식으로 /bin/sh를 ./A라는 이름을 가진 실행파일에 복사해서 쉘이 실행되도록 만든 후 export PATH=.:$PATH 를 이용해서 환경변수에 현재 위치를 등록합니다 

그 후 

buf + sfp + &system + dummy + 0x41가 들어있는 주소 를 넣으면 

system("A")가 실행되고 쉘이 실행됩니다 

저도 공부중이라서 뒤죽박죽 정리했습니다 

함수 호출 규약 = 함수를 호출 할 때 파라미터를 어떤 식으로 전달하는가? 에 대한 일종의 약속이다 
(*파라미터란 ? int myung(int a, int b); 이러한식으로 잇을때 int는 리턴형 myung은 함수명이고 괄호안의 int a , int b 가 파라미터(함수 인자) 이다

cdecl , stdcall, fastcall, thiscall 이렇게 4가지 방식이 존재한다 


1.cdecl

주로 C언어에서 사용하고 C언어와 C++프로그램에서 피러미터 전달시 디폴트로 사용오른쪽에서 왼쪽 방향으로 스택에 저장.
파라미터 해제는 프로시저를 호출한 것이 책임진다
caller에서 스택을 정리한다 .
cdecl에 비해서 코드 크기가 작아진다 
가변 길이 파라미터를 전달할 수 있다.


2.stdcall

Win32 API 프로시저 에서 사용한다(GUI) 
(* 프로시저 = 어떤 행동을 수행하기 위한 일련의 작업 순서)
Callee에서 스택을 정리


[*Callee란 ? 
1. 주로 EBX,ESI,EDI에 쓰인다.
2.Caller가 마음대로 사용할 수 있는 레지스터이다.
3.Callee는 이들 레지스터를 사용하기 전에 반드시 백업한 후 사용 해야 하고 이전 함수로 복귀하기 전에 값을 복구해 주어야 합니다. ] 

파라미터 전달은 cdecl과 동일하다 .
c언어에서 stdcall 방식을 사용하고 싶을 때는 함수이름 앞에 '_stdcall'옵션을 추가한다.
파라미터 해제는 프로시저 복귀 전에 이루어져야 한다 .

장점 : 빠른 함수 호출이 가능하다 , 함수 독립성이 뛰어나다 
복귀된 후에 호출한 프로시저에 대하여 신경쓸 필요가 없다
cdecl 방식의 함수 호출 규약에 비해 코드 크기가 줄어든다


3.Fastcall

첫 파라미터 2개를(ECX,EDX)를 이용해 전달한다 나머지는 스택을 통해 오른쪽에서 왼쪽으로 저장한다 .
스택 제거는 stdcall과 동일하다 

장점 : 더 빠른 함수 호출이 가능하다 

단점 : ECX , EDX 레지스터 백업이 필요하거나 함수에서 ECX , EDX를 다른 용도로 써야 할 경우 파라미터를 따로 저장해야한다


아주 간단하게 정리 

cdecl 부모 쪽에서 스택 복구

stdcall 자식 쪽에서 스택 복구

fastcall 레지스터를 통해 인자 전달



'시스템' 카테고리의 다른 글

Cent os 에서 xshell , putty 연동  (0) 2016.05.29
cent os 컴파일러(gcc) 다운  (0) 2016.05.28
스택 프레임  (0) 2016.05.27
쉘과 쉘코드  (0) 2016.05.22
/bin/sh의 의미  (0) 2016.05.22

스택 프레임 

어떠한 함수가 호출되었을 때 그 함수가 가지는 공간 구조이다.

ex ) void main() {

printf("화이팅");

}

어셈블리로 순서를 나타내면

프로그램 시작 
main() push
printf() push
printf() pop
main() pop
프로그램 종료

main 함수에서 printf 함수를 호출하네요 
메모리 상에서 main함수로부터 어딘가에 존재하는 printf 함수를 찾아가야 하고 
printf 함수가 종료되면 printf함수가 호출되었던 위치인 main 함수로 다시 돌아가야 합니다 

위에 있는 main함수는 function 함수의 위치를 파악 할 수 있습니다.
function 함수의 위치는 컴파일 할 당시에 지정이 되기 때문이죠.

허나 function 함수는 자신이 돌아갈 (main 함수) 위치를 알 수 없습니다 .

고로 main함수에서 function 함수를 호출하기 직전에 현재 위치를 스택 영역에 저장을 해야합니다 . function 함수가 끝나면 스택 영역에 저장된 main함수로의 복귀 주소를 알아내어 다시 돌아올 수 있기 때문입니다 .

*ebp는 베이스 포인터라고 불리웁니다. 이는 스택 프레임이 시작된 위치의 주소값을 가리킵니다 

여기서 잠시 일반적인 프로그램의 스택의 시작을 봐보도록 하겠습니다!

push ebp
mov  ebp , esp

이 친구들의 뜻이 뭘까요 ? 바로 스택 프레임의 생성입니다.
함수가 실행이 될 때 그 이전의 ebp(sfp)를 스택에 push하고 현재의 esp를 ebp에 저장해라 (새로운 ebp) 생성 이라는 뜻입니다

만약 
void function(){
123
}
void main()
{
  function()
}

이러한 프로그램이 있다고 칩시다!
function() 부분의 스택을 보게된다면 맨 처음에
Push ebp 
Mov ebp, esp 를 하고 있을겁니다 .
여기서 Push ebp가 실행이 되면 그 이전 스택 프레임(main)의 ebp가 
function의 스택 프레임에 push가 됩니다 . 

즉 main의 주소가 function의 esp 에 들어가게 됩니다!
이제 두번째 명령인 Mov ebp ,esp를 실행함으로써 
function 의 ebp로 만들어주게 됩니다 
고로 function의 ebp에는 main의 ebp가 존재하게 됩니다

*또한 새로운 function 스택 프레임의 ebp를 기준으로 
ret는 ebp-4 매개인자는 ebp-8과 같이 들어가게 됩니다

고로! esp는 현재 데이터의 위치 이고 ebp는 돌아와야할 주소 값!(main) 이란 겁니다!

'시스템' 카테고리의 다른 글

cent os 컴파일러(gcc) 다운  (0) 2016.05.28
함수 호출 규약(Calling Convention)  (0) 2016.05.27
쉘과 쉘코드  (0) 2016.05.22
/bin/sh의 의미  (0) 2016.05.22
dummy 크기 정확히 파악하기 - 출처 http://beist.org  (0) 2016.05.01

+ Recent posts