C 또는 C++에서 함수가 차지하는 크기를 알아 내고 malloc()
과 함께 동적으로 메모리를 할당하고 복사본을 만들고 함수 포인터를 캐스팅하여 실행할 수 있습니까? 여기에 단지에 대한 호기심, 그리고함수의 크기를 가져 와서 복사하고 실행할 메모리를 할당하는 방법이 있습니까?
암이 아닌 작업 예입니다
당신이 함수와 같은 방법으로 사용되는 코드의 크기를 얻을 수 없다,#include <stdio.h>
int main(void)
{
void *printf_copy = malloc(sizeof(printf));
((int(*)(const char *, ...))printf_copy)("%s\n", "hello, world");
return 0;
}
* "함수가 차지하는 크기를 얻으십시오"* - 가능성은 희박합니다. * "그것에 대해 malloc()을 사용하여 동적으로 메모리를 할당하고 복사본을 만듭니다"* - 예. * "함수 포인터 캐스팅으로 실행하십시오."* - 대부분의 OS에서는 기본적으로 쓰기가 가능한 메모리 페이지가 보안상의 이유로 기본적으로 실행되지 않기 때문에 가능하지는 않습니다. – cdhowie
코드 사본에는 작동하지 않는 것들이 있습니다 (예 : 상대 코드 점프/동일한 코드 외부의 코드 호출). 또한 코드를 복사 할 위치에서 코드가 실행되지 않거나 코드를 실행할 수있는 메모리로 복사하는 것이 불가능할 수도 있습니다. – Yunnosch
포인터를 사용하기 위해 함수를 복사 * 할 필요가 없습니다. – crashmstr