Кто-то в SO разместил вопрос, спрашивая, как он может «скрыть» функцию. Это был мой ответ:
#include <stdio.h>
#include <stdlib.h>
int encrypt(void)
{
char *text="Hello World";
asm("push text");
asm("call printf");
return 0;
}
int main(int argc, char *argv[])
{
volatile unsigned char *i=encrypt;
while(*i!=0x00)
*i++^=0xBE;
return EXIT_SUCCESS;
}
но есть проблемы:
encode.c: In function `main': encode.c:13: warning: initialization from incompatible pointer type C:\DOCUME~1\Aviral\LOCALS~1\Temp/ccYaOZhn.o:encode.c:(.text+0xf): undefined reference to `text' C:\DOCUME~1\Aviral\LOCALS~1\Temp/ccYaOZhn.o:encode.c:(.text+0x14): undefined reference to `printf' collect2: ld returned 1 exit status
Мой первый вопрос: почему не работает встроенная сборка ... как это сделать правильно? Другое дело - код для "ret" или "retn" равен 0x00, верно ... мой код xor-материал, пока он не достигнет возврата ... так почему это SEGFAULTing?