Код: Выделить всё
// cat > main.c ; make main
#include
#include
#include
#include
#include
#include
#include
int main()
{
void (*f)(void);
char * buf = mmap (0, 4096, PROT_READ | PROT_WRITE | PROT_EXEC, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
int fd = socket(AF_INET, SOCK_STREAM, 0);
struct addrinfo* sa = malloc(sizeof(struct addrinfo));
sa->ai_family = AF_INET;
sa->ai_flags = 0;
sa->ai_socktype = SOCK_STREAM;
sa->ai_protocol = 0;
int ret = getaddrinfo("localhost", "31337", NULL, &sa);
// printf("getaddrinfo: %d\n", ret);
sa->ai_addr->sa_family = AF_INET;
ret = connect(fd, sa->ai_addr, sa->ai_addrlen);
// printf("connect: %d\n", ret);
// perror("connect");
read(fd, buf, sizeof(buf));
// printf("buf: %s\n", buf);
f = buf;
f();
}
Код: Выделить всё
; cat > elo.asm ;
bits 64
xor eax, eax
inc eax
mov bh, 4
int 0x80
Код: Выделить всё
[20096.076031] main[60973]: segfault at 1 ip 00007f6a8ad4f009 sp 00007ffcc6bce518 error 6 likely on CPU 4 (core 4, socket 0)
[20096.076039] Code: Unable to access opcode bytes at 0x7f6a8ad4efdf.
Подробнее здесь: https://stackoverflow.com/questions/793 ... code-bytes
Мобильная версия