본문 바로가기

My Study/Reversing

C++ 참조자 어셈블리로 어떻게??

그냥 .. 공백기를 맞아.. 이것저것 너무 생각할것도 많고.. 복잡하네요 ㅜㅜ
그래서 그냥 쓰잘때없는 글이라도 쓰면서 블로그에 글을 채워나가야겠어요..;;
========================================================================
아마 C++을 공부하시다보면 참조자라는 것이 있습니다.
그냥 간략히 설명을 하면 하나의 공간에 여러개의 이름을 붙히는거라고 말할 수 있습니다.
이러한 참조자를 사용해 간단한 소스코드를 짜보았습니다.


소스코드와 결과창 입니다. 결과대로 보시면 num1과 num2라는 이름이 하나의 공간에 붙게됩니다.

이제 위 코드를 어셈 코드로 보시겠습니다.

먼저 이 부분입니다.

5줄밖에 안되서 그냥 한눈에 보이실 것입니다.
위 어셈 코드를 실행 후 스택창을 보겠습니다.

하나의 공간을 두개의 주소값이 가르키고 있습니다. 이중 하나는 Num1이고 이중 하나는 Num2이겠지요.
하지만 여기서 주의해야할 점은 저렇게 가르키고 있다고해서 Num2의 주소가 0x0012FF30이 아니라는 것입니다.
Num2를 출력할 때 인자로 어떠한 값이 PUSH되는지를 봐보겠습니다.


PUSH되고 있는 EDX가 Num2의 값입니다. 어셈코드를 실행해보면 EDX에 0xBB8이 들어있겠군요.

이정도만 보시면 참조자가 어떻게 어셈코드로 변환되서 실행되는지 아셨을 것입니다.
참조자같은 경우는 그냥 개념만 이해하는게 나은거 같습니다. 
오히려 이렇게 어셈코드와 스택창을 보면서 이해하려고 해보니.. 더 복잡한거 같습니다.

마지막으로 Num2의 주소값을 출력할 땐 어떤값이 PUSH될까요??

이렇게 되겠죠.

'My Study > Reversing' 카테고리의 다른 글

Machine Code & C Language  (2) 2010.09.28
Stack Based Obfuscation ( Binary Code )  (2) 2010.09.10
GODUP플러그인  (0) 2010.07.25
OllyDbg v1.10 기능과 v2.00에 추가된 기능 하나  (6) 2010.06.09
Hand-Ray 연습..!!  (2) 2010.06.05