안녕하세요?
아래의 코드로 메모리 번지 0x15F304에 있는 데이터의 주소를 가져올 수 있어습니다.
MOV EAX, 0x15F304 MOV EAX, DWORD PTR DS:[EAX] MOV DWORD PTR DS:[lpMem], EAX
그런데 반대로 데이터의 주소를 알고 있을 경우, 즉 데이터의 주소를 가지고있는 주소를 가져오려면 어떠게 하면 되는지 도움을 구함니다.
질문이 분명치 않네요. C의 이중포인터(**)를 원하시는건가요?
이중포인터면
mov eax,[addressofpointer] mov edx,[eax]
데이터가 있는 곳의 주소를 가져오고 싶다면 lea명령 써도 되고요, 아님 mov명령과 변수명 쓰면 변수명 자체가 주소가 됩니다.
var dd 3 ... mov eax,var ; NASM은 var 주소를 eax에 넣음
NASM에서는 위 방법대로 하면 var 변수가 위치하는 주소가 들어가는데 MASM의 경우는 앞에 어떤 연산자를 붙입니다. 안건드린지 오래돼서 까먹었네요. 위코드대로 하면 MASM에서는 var 변수에 있는 값 3이 EAX로 들어가거든요.
Written By the Black Knight of Destruction
말씀하신 방법으로 해 보니 다른 값이 나오네요...ㅠㅠ
제가 원하는 것은 1. 변수 주소 A로 실제 데이터가 있는 포인트 주소 B를 구했습니다. 2. 그런데 반대로 데이터 주소 B를 알고 있을 경우에 변수 주소 A를 구하는 방법입니다.
질문을 제대로 했는지...완전 어렵네요...
질문하신 내용은 다대일 함수에서 역함수를 구하는 문제의 답을 묻는 것과 같습니다. 즉, 정상적이면서도 단순한 방법으로는 원하시는 답을 구할 수 없는 겁니다. 저런 경우 코드/데이터 메모리 영역을 전부 탐색하여 해당 주소값을 저장한 메모리 영역의 주소를 찾고 그 주소를 갖고 있는 코드를 검색하여 역탐해야 합니다. (이렇게 하더라도 정확히 찾는다고는 보장할 수 없습니다. 중간에 같은 값을 갖는 코드나 더미 데이터가 존재할 수 있기 때문입니다.)
텍스트 포맷에 대한 자세한 정보
<code>
<blockcode>
<apache>
<applescript>
<autoconf>
<awk>
<bash>
<c>
<cpp>
<css>
<diff>
<drupal5>
<drupal6>
<gdb>
<html>
<html5>
<java>
<javascript>
<ldif>
<lua>
<make>
<mysql>
<perl>
<perl6>
<php>
<pgsql>
<proftpd>
<python>
<reg>
<spec>
<ruby>
<foo>
[foo]
C의 이중포인터(**)를
질문이 분명치 않네요.
C의 이중포인터(**)를 원하시는건가요?
이중포인터면
데이터가 있는 곳의 주소를 가져오고 싶다면 lea명령 써도 되고요,
아님 mov명령과 변수명 쓰면 변수명 자체가 주소가 됩니다.
NASM에서는 위 방법대로 하면 var 변수가 위치하는 주소가 들어가는데
MASM의 경우는 앞에 어떤 연산자를 붙입니다. 안건드린지 오래돼서 까먹었네요.
위코드대로 하면 MASM에서는 var 변수에 있는 값 3이 EAX로 들어가거든요.
Written By the Black Knight of Destruction
Written By the Black Knight of Destruction
답변 감사합니다...
말씀하신 방법으로 해 보니 다른 값이 나오네요...ㅠㅠ
제가 원하는 것은
1. 변수 주소 A로 실제 데이터가 있는 포인트 주소 B를 구했습니다.
2. 그런데 반대로 데이터 주소 B를 알고 있을 경우에 변수 주소 A를 구하는
방법입니다.
질문을 제대로 했는지...완전 어렵네요...
...
질문하신 내용은 다대일 함수에서 역함수를 구하는 문제의 답을 묻는 것과 같습니다.
즉, 정상적이면서도 단순한 방법으로는 원하시는 답을 구할 수 없는 겁니다.
저런 경우 코드/데이터 메모리 영역을 전부 탐색하여 해당 주소값을 저장한 메모리
영역의 주소를 찾고 그 주소를 갖고 있는 코드를 검색하여 역탐해야 합니다. (이렇게
하더라도 정확히 찾는다고는 보장할 수 없습니다. 중간에 같은 값을 갖는 코드나
더미 데이터가 존재할 수 있기 때문입니다.)
댓글 달기