Я хочу, чтобы отобразить мир привета от шеллкода с кодом прост:бесконечный цикла в шеллкоде
#include <stdio.h>
char shellcode[] = "\xeb\x17\x59\x31\xc0\xb0\x04\x31\xdb\x43\x31\xd2\xb2\x0f\xcd\x80\xb0\x01\xbb\x00\x00\x00\x00\xcd\x80\xe8\xe4\xff\xff\xff\x48\x65\x6c\x6c\x6f\x20\x73\x68\x65\x6c\x6c\x21\x0a\x0d";
int main(int argc, char **argv){
int (*func)();
func = (int (*)()) shellcode;
(int)(*func)();
return 0;
}
проблема должна быть в файле сборка, здесь:
BITS 32
jmp short one
;write hello world on standard output
two:
pop ecx ;i get string address
xor eax,eax
mov al,4
xor ebx,ebx
inc bl ;bl should be 1
xor edx,edx
mov dl,15
int 0x80
;exit with status 0
mov al,1
xor ebx,ebx
int 0x80
one:
call two
db "Hello shell!",0x0a,0x0d
код работает хорошо, но не выходит после отображения «hello shell!», напротив, он продолжает отображать это предложение, как в бесконечном цикле.
Я не эксперта по 'Int 0x80', но вы уверены, что первый системный вызов не затирать верхний 24 бита' eax' (которые имеют быть нулевым для второго syscall)? – NPE