У меня есть программа, написанная на C, которая включает 2 функции, одна функция - main()
, а другая - предварительно скомпилированная функция, которая хранится в виде байтового массива (назовем ее varFunc()
).Указатель на массив преобразуется в функции main
в указатель на функцию, а затем вызывается из функции main
.(см. код ниже)
Теперь я знаю, что существуют операционные системы и некоторые процессоры, которые не позволяют выполнять код из раздела данных, и мой 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 зашифрован:)
Спасибо, Биньямин