C関数を呼び出すアセンブリでデバッグしていて、ollydbgでそれをトレースしようとしていると思います(私はそれが何であるかを調べ、機能リストに基づいてこの仮定に基づいていました)。これを行うのは非常に困難です。
次のことをお勧めします。
...
void print_ptr(void * p) {
fprintf(stderr, "%p\n", p);
}
...
IMAGE_DOS_HEADER iDOSh;
print_ptr(lpBuffer);
memcpy(&iDOSh,lpBuffer,sizeof(iDOSh));
print_ptr(lpBuffer);
実際に印刷できない場合でも問題ありません。extern
問題のファイルに関数を作成するだけmemcpy
で、コンパイラーは最初のパラメーターを保持する場所に値をロードするように強制されます。デバッガーでこれを観察できるはずです。
memcpy
(合理的な C ライブラリから) が実際に何か間違ったことをしている可能性は非常に低いです。
何が問題なのかを推測する必要があるとすれば、それは実際にはメモリ ロケーションのリンカー ラベルではなく、リンカー ラベルであるlpBuffer
はずです。void *
その場合、次のように宣言してみてください。
extern char lpBuffer[];
memcpyを次のように実行します
memcpy(&iDOSh,lpBuffer,sizeof(iDOSh));
また
extern IMAGE_DOS_HEADER lpBuffer;
memcpyを次のように実行します
memcpy(&iDOSh,&lpBuffer,sizeof(iDOSh));