我已經搜索了相當多的答案,沒有成功。 在調試器中,可以編寫指令然後執行它們。 這需要可執行映像中的特殊權限。 我試圖在沒有調試器的情況下執行此功能。跨平臺自我修改代碼(僅適用於Intel/AMD)
請告訴我一個ASM的「Hello World」程序,它具有自修改代碼 (也許代碼爲大寫在你好的「H」替換了一系列090H的) 和命令需要啓用它的執行。 接下來的2行是用於h-> H替換的機器碼前後。
90 90 90 90 90 90 90 90 90 90 90 ; 11 NOPs
8a 26 50 00 80 e4 df 88 26 50 00 ; MOV AH,[BX]; AND AH,0DFH; MOV [BX],AH;
我有完整的能力和自信構建iAPX86機器碼。 我的問題是令人信服的Linux,達爾文/優勝美地,和Windows允許執行。最後,我希望能夠爲我正在編寫的新語言實時構建和修改可執行文件 。 新語言的體系結構在現代實踐中沒有相似之處。
我希望在面對約會時有很多批評, ,但我會盡管繼續我的計劃。
我不相信有一個平臺不可知的方式做到這一點。我可以告訴你如何在32位或64位代碼的Windows上執行此操作,但我相信您也可以在Google上查看這些信息。 - 你在評論中展示的是16位代碼 - 是有意的嗎? –
另外,你說你想消除調試器,但是你的代碼必須在某些東西,某些進程上下文中執行 - 沒有調試器會怎麼樣? –
您必須使用操作系統特定的機制將代碼段標記爲可寫。在Linux和BSD上,你會這樣做的方式是通過[mprotect](http://linux.die.net/man/2/mprotect) –