私はあなたが私が何をしたいのか見ることができるようにあなたは、両方のMOVのはerror C2415: improper operand type.
C++ ASM ASMで構造体メンバを使用する方法をインライン?
を生成することを伝えることができ、次の
struct john {
int oldA;
int A;
} myJohn;
DWORD gotoAddressBack = 0x00401000;
void __declspec(naked) test(void) {
__asm {
MOV myJohn.oldA, DWORD PTR DS:[ESI+0x77C]
MOV DWORD PTR DS:[ESI+0x77C], myJohn.A
JMP gotoAddressBack
}
}
が店myJohn.oldA
に[ESI + 0x77C]の値であり、持っていますそれから私はMOV
命令のためのメモリ/メモリオペランドがありませんmyJohn.A
なぜDSに対処する必要がありますか? –
ESIが変わる前に、4バイトの値がメモリに保存され、ESIは毎秒新しい値に変更され続けます。ESI + 0x77Cの値の位置を自分のものに置き換えて、参照のために古い値を保存する必要があります。あなたが興味を持っているのであれば、test()関数はターゲット内の小さなパッチによって呼び出されるように束縛されています – SSpoke
なぜそれがDSなのかわかりません。レジスタを別の値にパッチしたかったのです。それは私の代わりにmyJohn.Aの場合は動作します。代わりに '12345'のように置き換えれば、完全に変更が適用されます。誰かが構造体なしでこれを行う方法を私に教えてもらえれば、 'int oldA = 0;' 'int A = 0;'も役に立ちます..私には関係ありません。もう少しパッケージ化された/私のためのneater – SSpoke