我有C編寫的,它包括2個功能,一個功能是main()
,另一個功能是存儲爲字節數組預編譯的功能的程序(讓我們稱之爲varFunc()
)。指向數組的指針在main
函數中轉換爲函數指針,然後從main
函數中調用它。 (見下面的代碼)Run函數定義爲可變
現在,我知道有操作系統和一些處理器,將不允許從數據部分執行代碼,而我varFunc
應該就在那裏......
是否有辦法使用C語言使C編譯器向代碼/文本部分添加一些變量?如果沒有,是否有辦法在大多數編譯器中由編譯器強制執行?
char varFuncArr[] = { 0xDE, 0x67, 0x6F, 0x6F, 0xAC, 0x13, 0x05, 0x01, 0xDA, 0xF0, 0xBD, 0x79, 0xA9, 0x10, 0x00, 0x00, 0xB8, 0x74, 0x00, 0x00, 0x00, 0x3F, 0x58, 0x13, 0xEA, 0x0A, 0x2E, 0xEE, 0xC7, 0x01, 0x05, 0xD0, 0x6E, 0xB8, 0x9E};
typedef unsigned long (*funcPtr)(void* d[]);
int main(int argc, char** argv)
{
unsigned int ra[8];
funcPtr varFunc;
for (i=0; i<8; i++)
ra[i] = 0;
varFunc = (funcPtr)varFuncArr;
return varFunc(ra);
}
注1:我知道,這是調用一個函數很笨拙的方式,它也使超級平臺和編譯器,但我告訴這個例子中,以使其更簡單,實際使用包括加密功能而不是varFuncArr()
。
注2:不要嘗試運行這段代碼,varFuncArr在這個例子:)加密
感謝, 本雅明