리눅스 64 비트 머신에서 16 진수 바이트 코드를 실행할 수있는 간단한 C 메소드가 필요합니다. 여기에 내가 가지고있는 C 프로그램입니다 :16 진수 바이트 코드를 실행하는 C 코드를 얻는 방법?
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");
}
내가 (정말 아무것도 안거야)
.text
.globl _start
_start:
xorq %rax, %rax
이 간단한 조립 프로그램을 writting에 의해 획득 ("\x48\x31\xc0"
)를 실행하려고 코드 그런 다음 바이트 코드를 얻기 위해 컴파일하고 obj 덤프한다.
그러나 C 프로그램을 실행하면 세그먼트 화 오류가 발생합니다. 어떤 아이디어?
? 하나의 명령을 실행 한 다음 나중에 명령 (제어하지 않음)을 실행 한 다음 명령을 실행하여 합법적 인 코드 또는 segfault를 트리거하는 코드를 나타내지 않는 메모리에 도달 할 때까지 실행합니다. –
간접 함수 호출은 반환 주소를 스택에 푸시하는'call '이어야하기 때문에'ret'에 바이트 코드를 추가해야합니다. Atleast, 이것은 내 최고의 교육 추측이며, 나는 이런 것을 본 적이 없다. – Chris
나는 이것이 아무 것도하지 않기를 기대하지만, 나는 충돌없이 달릴 수 있기를 바랍니다. – Nosrettap