exec-shieldの備忘録

小江戸ラグに昔なげたexec-shieldを備忘録としてのせときます。
さっすがmasakaさん!
>|
 高橋(masaka)です。

$ cat /proc/sys/kernel/exec-shield
1

とかなりませんか? だとすれば、

# echo 0 > /proc/sys/kernel/exec-shield

してみるとか。いや、それが本質的解決かどうかはわかりませんが。


07/12/11 に toshitsugu HIRASAWA さんは書きました:
>
>> どこがわるいの?
>> おしえてガリレオ
>>
>>> [hirasawa@cent5-19 FuncVariMem]$ cat create_func.c
>>> #include // printf()

>>> int simple_func(void); // Declare simple_func as an
>>> // function entry address
>>> asm("simple_func: "); // simple_func entry address
>>> asm(" movl $123, %eax "); // return 123
>>> asm(" ret ");
>>> asm(" .byte 0x55, 0xAA "); // Mark the end of function

>>> unsigned char text[ 256 ]; // .text section holder

>>> int main() {
>>> unsigned char *src, *dst;
>>> int (*fn)(void);

>>> src = (unsigned char*) simple_func;
>>> dst = text;
>>> while *1 {
>>> printf("%02X ", *src);
>>> *dst++ = *src++;
>>> }

>>> text[1] = 88;
>>> printf("\n");

>>> fn = (int (*)(void)) text;  << ここらへんでひっかかる
>>> return( (*fn)() );      << ここらへんでひっかかる

>>> }
>>> [hirasawa@cent5-19 FuncVariMem]$ gcc -g -o create_func create_func.c
>>> [hirasawa@cent5-19 FuncVariMem]$
>>> [hirasawa@cent5-19 FuncVariMem]$ ./create_func
>>> B8 7B 00 00 00 C3
>>> セグメンテーション違反です
>>> [hirasawa@cent5-19 FuncVariMem]$
>>>
>
>

<

*1:*src != 0x55) || (*(src + 1) != 0xAA