Windows 실행 파일을 리버스 엔지니어링하는 중입니다. 내가 실행 파일 (다른 스레드, 자신의 스택)에 주입 일부 코드에서 사용하고자하는 클래스를 발견. 메서드 주소와 멤버 변수 구조가 주어지면 어떻게 그런 클래스를 선언 할 것인가?C++에서 문서화되지 않은 클래스 사용
예를 들어, foo라는 클래스를 찾았고, 생성자는 @ 0x4012D30이고 doTheMario @ 40125D4라는 함수가 있다고 가정 해 봅시다. 또한 개인 데이터의 3 가지 DWORD를 보유한다는 것도 알고 있습니다.
이제class GuessedFoo {
private:
int bar;
char *cafebabe;
float deadbeef;
public:
GuessedFoo(int a, int b);
void doTheMario();
};
, 이것은 완벽하게 멋쟁이 클래스입니다,하지만 지금은 컴파일러/링커에 클래스 메소드를 바인딩 할 수있는 방법이있다 : 방법 모두 _thiscalls이기 때문에, 그래서 내 코드에서 같은 클래스를 선언 내가 말한 두 이전 주소? 물론 나는 asm 래퍼를 써서 stdcall을 thiscall로 바꾸고 클래스의 대신에 구조체를 사용하는 모든 메소드를 사용할 수 있지만 더 좋은 방법이 있어야한다.
현재 gcc/g ++를 사용하고 있지만 VC++로 전환 할 수 있습니다 (gcc의 인라인 asm이 나에게 두통을 주므로).
만약 메모리가 제공된다면 GCC에서 인텔 문법을'-intel_syntax noprefix'와 함께 사용할 수 있습니다 ... –
네,하지만 puke-like GAS 문법은 fiddle C/C++ 코드의 스택 변수와 인수를 인라인 어셈블리와 연결할 때 유용합니다. VC++의'__asm {}'블록을 사용하면 훨씬 쉽습니다. – Serge