스택에 char 및 함수 포인터를 덮어 쓰려고합니다. 이 질문 (How can I store a value at a specific location in the memory?)에서 내가 발견 한 것을 바탕으로 그 캐릭터를 덮어 쓰는 방법을 알 수있었습니다. 내 문제는 지금 내가 잘못 캐스팅했다는 컴파일 오류가 발생한다는 것입니다.C++ 함수 포인터를 메모리에 삽입하십시오.
void foo(char letter);
void bar(char letter);
void function1()
{
void (*pointer)(char);
pointer = foo;
letter = 'B';
function2();
(*pointer)(letter);
}
void function2()
{
int number; // Used in omitted code
*(char *)(&number + 75) = 'A';
*(void (*)(char)) (&number + 42) = &bar; // This is the line with the error
}
첫 번째 분사는 작동하지만 두 번째 분사는 나에게 컴파일 오류를 발생시킵니다.
g ++ 컴파일러를 사용하여 Redhat Linux를 실행 중입니다. 컴파일러에서 얻은 오류는 다음과 같습니다.
"* (void (char))로 변경하면 컴파일러에서 오류가 발생합니다. 컴파일러는 다음과 같이 말합니다.
"함수 유형 'void (char)'에 대한 캐스트가 잘못되었습니다."
이 구문은 무엇입니까?
'pass'의 주소를 메모리의 한 위치에 쓰려면 메모리 주소를 함수 포인터로 캐스트하지 마십시오. 함수 포인터를 메모리 주소로 변환하십시오. –
컴파일러의 정확한 출력을 게시하고 오류가 발생한 행을 명확하게 표시하는 것이 좋습니다. 또한 까다로운 작업을 수행하고 컴파일러 최적화 문제에 부딪 힐 수도 있으므로 사용중인 컴파일러, 컴파일하는 데 사용한 명령 및 실행중인 운영 체제를 정확하게 말해야합니다. –
그래서 악성 코드를 작성하려고하는데 도움을 청합니다. –