1
我試圖檢測我的Windows是否在虛擬機上運行。我發現這被稱爲喬安娜魯特克絲卡的紅色藥丸這個C代碼:當我在我的VC++項目它在線Red Pill檢測虛擬化
((void(*)())&rpill)();
失敗消息運行它
int swallow_redpill()
{
unsigned char m[2+4], rpill[] = "\x0f\x01\x0d\x00\x00\x00\x00\xc3";
*((unsigned*)&rpill[3]) = (unsigned)m;
((void(*)())&rpill)();
return (m[5]>0xd0) ? 1 : 0;
}
但是:訪問衝突執行位置0x003AFCE8。 我做錯了嗎?
您試圖使用'rpill'中的數據作爲函數,但是程序中的正常數據不應該是可執行的,因此它不能被「調用」。如果您使用的是64位系統,其中地址大小爲64位? 'unsigned'類型等於'unsigned int',它在所有現代標準PC平臺上都是32位類型的,所以當你將它「修補」到代碼中時,'m'的地址可能會被截斷。 –
@Someprogrammerdude是否意味着這不是工作方法?或者有什麼方法可以使這個解決方案在x86和x64系統上都能正常工作? – Kiramm
指針問題很容易通過將您的程序構建爲32位可執行文件來解決。這不會解決數據無法執行的問題,但我不知道如何解決這個問題。 –