나는 게임에 C++ DLL을 주입하고 있으며, 필자의 일부 코드에 함수를 연결하고 싶습니다. DLL은 매번 다른 위치에 매핑되기 때문에 직접 점프와 호출이 더 쉬울 것입니다. 또한 이것은 후크이기 때문에 함수로 돌아갈 때 스택이나 레지스터를 변경하고 싶지 않습니다. 포인터를 가질 수 있도록 Asm을 저장하는 char *을 선언합니다. (char * asm
x86 어셈블리에서 한 섹션에서 다른 섹션으로 무조건 점프를 수행하려면 어떻게해야합니까? 예 : .section .text
main: ...
jmp here
...
.section .another
here: ...
나는이 훨씬 뛰어 것 같다. 이걸 실행할 때 세그 폴트가 생겼어. 해결 방법은 없습니까?
다음에 대해 궁금합니다. 필자는 어셈블리 언어 작성시 IA32가 상대 점프의 사용을 촉진하는 방법, 즉 바이트의 변위량을 점프하는 것과 절대 점프를 사용하는 것, 즉 메모리의 특정 주소로 eip를 변경하는 방법으로 설계된 것을 알아 챘다. 이 논리 뒤에있는 논리는 무엇입니까?
8 비트 또는 16 비트 오프셋을 사용하는 점프의 경우 IA-32 아키텍처에서 EIP 레지스터에 해당 오프셋을 추가하면 오프셋에서도 일치하는 비트가없는 EIP 비트에 영향을 줄 수 있는지 여부는 의문입니다. 또는 오프셋에 비트 수와 일치하는 EIP 레지스터의 일부만 추가하는 것과 비슷합니까?
함수의 시작 부분을 JMP 명령어로 바꾸어 함수에 연결하려고합니다. 하지만 문제는 내 함수의 주소를 대상으로 JMP 오프셋을 계산하는 방법을 모르겠다는 것입니다. 글쎄, 만약 당신이 메모리 (Destr addr - Current addr)에서 앞으로 뛰어 내리면 그것을하는 방법을 안다.하지만 나는 당신이 메모리에서 뛰어 내릴 때 그것을 결정하는 방법을 모른