Tôi muốn có một phương thức C đơn giản để có thể chạy hex bytecode trên máy Linux 64 bit. Đây là chương trình C mà tôi có:Làm cách nào để lấy mã c để thực thi mã byte hex?
char code[] = "\x48\x31\xc0";
#include <stdio.h>
int main(int argc, char **argv)
{
int (*func)();
func = (int (*)()) code;
(int)(*func)();
printf("%s\n","DONE");
}
Mã mà tôi đang cố gắng để chạy ("\x48\x31\xc0"
) Tôi thu được bằng writting chương trình lắp ráp đơn giản này (nó không phải thực sự làm bất cứ điều gì)
.text
.globl _start
_start:
xorq %rax, %rax
và sau đó biên dịch và objdump-ing nó để có được bytecode.
Tuy nhiên, khi tôi chạy chương trình C, tôi nhận được lỗi phân đoạn. Ý tưởng nào?
Ngay cả khi phân đoạn dữ liệu của bạn có thể thực thi hoặc bạn chưa bật NX, bạn mong đợi điều này sẽ làm gì? Nó thực hiện một lệnh và sau đó lệnh sau đó (mà bạn không kiểm soát) và sau đó lệnh sau đó, cho đến khi nó đạt đến bộ nhớ không đại diện cho mã hoặc mã hợp pháp kích hoạt một segfault. –
Bạn sẽ cần phải thêm mã byte cho một 'ret' vì hàm gián tiếp gọi bạn làm nên là một' cuộc gọi' đẩy địa chỉ trả về vào ngăn xếp. Atleast, đây là phỏng đoán tốt nhất của tôi, tôi chưa bao giờ thấy bất cứ điều gì như thế này cả. – Chris
Tôi hy vọng điều này không làm gì cả, nhưng tôi muốn nó có thể chạy mà không bị rơi. – Nosrettap