c,c++표현으로 불가능한가?
글쓴이: nayana / 작성시간: 금, 2005/01/14 - 8:25오전
Quote:
int function( int parameter )
{
int local = 3;
return 6;
}스택에서 실행되는 순서는
1. 빈 int 자리 하나가 스택에 쌓인다.
2. parameter가 스택에 쌓인다.
3. local이 스택에 쌓인다.
4. 값 6이 반환값 자리에 들어간다.
5. local 이 뽑힌다.
6. parameter가 뽑힌다.
7. 이 함수를 호출한곳에서 스택의 최상위값, 즉 반환값을 뽑는다
스택에 실행되는 순서를 눈으로 확인할려고 하는데...생각보다 쉽지 않습니다. 프로그래밍 Q&A올렸었었는데...어셈블리어로 변형시켜서 의미를 파악했는데...^^
과연 c,c++로 표현못하나요?
나머지 제 나름대로 표현을 할수 있을것 같은데...
1, 4번이 표현하는것이 막막하네요...^^
Forums:
gdb
단순히 눈으로만 확인하고 싶으시면..
gdb를 사용해 보세요.
emacs 등과 함께 소스레벨로 디버깅하면서
해당 포인터 값과 함께 헥사 값으로 찍어서 확인해 보시면 되겠네요.
gdb 내부에서 x 명령을 사용하시면 특정지점에서 헥사값으로
프로그램 내에 어느 위치에서 부터 어디까지 내용을 찍어 볼 수 있습니다.
(help x : x/1000 memory_address )
disassemble 과 함께 사용하시면..
%eap, %ebp 등의 주소와 값이 어떻게 할당되는 지도 볼 수 있습니다.
gdb 내에서 값을 조작하고 싶은 경우에는 set 명령등을 사용해서 변경시킬 수 도 있죠.
쉘코드 등을 작성할 때 라든가..
프로그램 내의 값을 조작할 때도 사용할 수 있습니다.
참고 하시라고 적습니다.
Be Creative For Fun!!
답변에 감사합니다. 그러면 c,c++로 표현이 불가능하다고 봐야하네요
답변에 감사합니다.
그러면 c,c++로 표현이 불가능하다고 봐야하네요!!!
c,c++로 표현을 못하는것도 있구나^^;
스택에 쌓인 것은 포맷 스트링으로 볼 수 있습니다.좀 무식하지만
스택에 쌓인 것은 포맷 스트링으로 볼 수 있습니다.
좀 무식하지만
int function( int parameter )
{
int local = 3;
printf("%08x %08x %08x %08x %08x %08x %08x %08x %08x %08x %08x %08x %08x %08x %08x %08x %08x %08x %08x %08x %08x %08x %08x %08x %08x %08x %08x %08x %08x");
...
}
이런식으로 하시면 됩니다. ^^;; main의 argv쪽부터 나올거에요. function에 사용된 parameter나 local같은 값은 좀 뒷쪽에 나올겁니다. 보시면 아실테고...
그런데 굳이 c, c++로 해야 할 이유가 있나요?
[quote="촙5"]스택에 쌓인 것은 포맷 스트링으로 볼 수 있습니다.
이게... i386말구 다른 아키텍쳐에선... 어떻게 되죠??? argument넘기는 방법이 다른데선... 확인 불가능인것 같은데...
Re: c,c++표현으로 불가능한가?
이런건... 그냥 대략 어떻게 된다... 정도까지만 알고 있으면 되지 않을까요?
어차피 아키텍처마다 방법도 틀리고(스택이 똑바로 자라는 아키텍처도 있더군요...)... 컴파일러가 다 알아서 해주니깐...
함수 호출할 때 현재 프레임포인터 스택에 들어가고... 함수내의 지역변수 스택에 잡히고... 함수 돌다가 되돌림값 특정레지스터에 넘겨져 상위함수에 되돌려지고...
이정도만 알고 있어도 충분치 않을까 합니다...
굳이 공부의 목적이 아니라면... :roll:
굳이 c,c++해야할 이유는 없습니다.일단 우선은 공부목적이고 제가
굳이 c,c++해야할 이유는 없습니다.
일단 우선은 공부목적이고 제가 표현하고 싶은것을 코드로 단지 표현하고 싶어서 입니다.