Дизассемблировал helloworld на C
#include<stdio.h>
int main()
{
printf("Hello world\n");
}
Следующим образом:
gcc -O2 -S -c test.c
В дизассемблированном коде создал новую секцию. Jmp на метку внутри новой секции приводит к сегфолту.
Вот код с добавленной секцией .code и меткой mylabel, с переходом на нее:
.file "test.c"
.section .rodata.str1.1,"aMS",@progbits,1
.LC0:
.string "Hello world"
.text
.p2align 4,,15
.globl main
.type main, @function
main:
.LFB11:
.cfi_startproc
jmp mylabel
continue:
movl $.LC0, %edi
jmp puts
.cfi_endproc
.LFE11:
.size main, .-main
.ident "GCC: (Debian 4.4.5-8) 4.4.5"
.section .note.GNU-stack,"",@progbits
.section .code
mylabel:
jmp continue
Без модификации, конечно же, код работает. Подскажите как выполнить код с другой секции.
Собираю так:
gcc test.s
P.S. Раньше использовал NASM и там такой переход работает. Выхлоп GCC в NASM транслировать не удалось. Кстати, может подскажете чем?