問題タブ [usercall]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - __usercall、__ userpurge(__ spoils)関数をフックする方法は?
__usercall
関数のフックタイプについて誰か知っていますか?フックに成功し__thiscall
、電話__stdcall
を__cdecl
かけましたが、これで十分です。
__usercall
のライブラリをフックしている人、またはへの変換を使用してこのタイプの関数をフックする方法を知っています__stdcall
か__cdecl
?
私が最初にフックしなければならない関数は次のとおりです。
c - ユーザーコール機能をフックしていますか?
VM_Create で関数のアドレス (systemCalls) を仮想マシンに渡す仮想マシンがあります。
そこで、VM_Create をフックして syscalls アドレスを盗み、それをバックアップ関数ポインターに入れます。変更した systemCalls 関数のアドレスが元の VM_Create に渡され、そこから引数を変更したり、呼び出しを追加または削除したり、backed- up syscalls 関数。ゲームの新しいリリースまで、それはうまくいきました。
私は問題を発見したと信じています:
これは、変更されていない systemCalls 関数の始まりです。
これは私の変更された syscall 関数です:
問題は、変更された関数から元の関数を呼び出すことです。
すでに失敗しています。
逆アセンブリの疑似コードからわかるように、CL_CgameSystemCalls の新しい定義は次のようです。
つまり、私が逆コンパイルを正しく解釈した場合、__usercall 属性を追加し、最初の引数をレジスタ ebx に入れることによって、関数が変更されたことを意味します。
今私の質問:
*args (args[0]) を変数に取得するにはどうすればよいですか?
そして、現在__usercallを使用している変更された関数から変更されていない関数を呼び出すにはどうすればよいですか?
これは、usercall を使用したシステムコールの逆アセンブリです。
そして、これは hexrays 逆コンパイラから作成された疑似コードです:
CL_CgameSystemCalls 関数の完全な (最新の既知の公式) ソースは、次の場所にあります (コピーして貼り付けるには多すぎます)。
http://ioqsrc.vampireducks.com/da/d3b/cl__cgame_8c-source.html
そして、これは古いバージョンの逆アセンブルで、変更された syscall から orig_syscall を呼び出すと機能しました。
c++ - usercall 関数の stdcall ラッパーは正しいですか?
以下の __usercall 関数を _ cdecl/ _stdcallにラップする必要があります。
a1 は整数、a2 は実際には int の配列 ('int args[10]')
これは正しいです?<al>
sub_4017B0の背後にある意味は何ですか?
sub_4017B0 を呼び出すためのラッパーはどのようになりますか?
ラッパーには次の署名が必要です。
c++ - eax と esi でパラメーターを指定して関数を呼び出す方法。gcc c++
c++ で型定義できない gcc を使用して関数ポインターを呼び出す必要があります。私はasmが苦手なので、助けていただければ幸いです。
この関数は、arg1 を eax に、arg2 を esi に渡します。引数は右から左にプッシュされ、呼び出し元がスタックを消去します
編集: ありがとうウィレム。私はそれをこのように呼び出すことに成功しました:
edit2: clobber リストに「メモリ」を追加しました
c++ - C++ __usercall フック
こんにちはIDAで私は機能を持っています
そして、私は自分の C++ インジェクトされた dll からそれをフック/呼び出したいと思います。
そして、これはexeがこの関数を呼び出す方法です
機能に数回あるようです
より多くの引数があること、または IDA が間違った引数の型を取得したことを意味するのはどちらでしょうか?