2010-03-02 2 views
8

나는 다음과 같은 코드가 있습니다포인터로 가리키는 메모리 위치에 레지스터의 값을 저장하려면 어떻게합니까?

void * storage = malloc(4); 

__asm 
{ 
    //assume the integer 1 is stored in eax 
    mov eax, storage //I've tried *storage as well but apparently it's illegal syntax 
} 
/* other code here */ 
free(storage); 

그러나, 코드를 때 (*(int *)storage에서와 같이) 저장 포인터, 내가 값을 저장하는 적절한 방법은 무엇인가 1. 그래서하지 않는 역 참조 C++ 포인터가 가리키는 메모리에 레지스터를 삽입 하시겠습니까?

답변

5

정말 필요한 항목을 알고 계십니까? 레지스터 값을 malloc ("포인터가 가리키는") 즉, *(int*) storage 위치에 할당 된 메모리에 저장하는 코드를 요청했지만 값을 포인터에 저장하거나 적어도 저장하려고 시도한 응답을 수락했습니다. 그 자체는 완전히 다른 것입니다. 메모리에 eax을 저장하려면

는 요청에 따라, 당신이

mov edi, dword ptr storage 
mov dword ptr [edi], eax 

(필자는 "인텔"을 사용하여 오른쪽처럼 뭔가를해야 할 것 *(int*) storage로 즉, "포인터가 가리키는" 왼쪽에서 오른쪽 피연산자에서 왼쪽 피연산자로 복사합니다. (오른쪽에서 왼쪽 또는 왼쪽에서 오른쪽으로 컴파일러가 사용하는 구문을 모르겠습니다.)

참고 사항 mov edi, dword ptr storage에서 dword ptr 부분은 완전히 선택 사항이며 아무런 차이가 없습니다. ference 무엇이든지.

+0

당신이 옳다고 생각합니다. 첫 번째 대답이 제대로 작동하는지 확인할 시간이 없었습니다. "dword"와 같은 것들이 있다는 것을 상기 시켜서 문제를 해결할 것이라고 생각했습니다. –

관련 문제