0
我正在嘗試編譯並運行代碼片段波紋管,它在Windows x86或WOW64 中工作,但在Windows x64中發生崩潰並出現訪問衝突錯誤。嘗試將32位代碼移植到64位平臺時出現內存錯誤
與gcc和Microsoft C/C++編譯器一起編譯。
/*Microsoft (R) C/C++ Optimizing Compiler Version 15.00.30729.01 for x64
(x64)cl -W3 -Zi tx.c -Fetx64
(x86)cl -W3 -Zi tx.c -Fetx32
gcc (tdm64-1) 4.7.1
(x64)gcc -m64 -Wall -O2 -o tx64 tx.c
(x86)gcc -m32 -Wall -O2 -o tx32 tx.c
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef int (*fpPUTS)(const char *str); /*function pointer that takes an const char * as an argument and returns int*/
typedef void (*fpMEMEXEC)(fpPUTS pPuts, char *str) ;/*function pointer on which first argument is pointer to above function*/
void toMem(fpPUTS pPuts, char *str)
{
pPuts(str);
}
int main(int argc, char* argv[])
{
fpMEMEXEC pMemexec;
pMemexec = (fpMEMEXEC) malloc(4*1024);/* Allocate 4 KB memory space to the function pointer */
memcpy(pMemexec, toMem, 4*1024); /* Copy the content of toMem into newly allocated memory */
pMemexec(puts, "Hello word !!\n"); /* execute it in memory */
return 0;
}
我的問題是,爲什麼這段代碼無法正常工作64位環境?
什麼規則不符合,但應該是爲了正確工作這段代碼?
感謝您的指導! SetProcessDEPPolicy return GetLastError() - 50 - 請求不受支持。 正如MSDN所說,它僅支持32位進程。 – boleto
@boleto你是對的。我編輯了答案。 – Elazar
您提供的鏈接http://icebuddha.com/slopfinder.htm可用於檢查可執行文件(.exe)是否啓用了DEP保護(數據執行保護)。 –