C (GCC 4.6.3、x86 (64 ビット CPU)、Ubuntu 12.04 64 ビット) でいくつかのアセンブリ呼び出しを実行して、レジスタ値をゼロにしてスタック ポインターを設定し、最終的にジャンプ命令を呼び出そうとしています。
これは私が得たものです:
asm("xor %eax, %eax");
asm("xor %ebx, %ebx");
asm("xor %ecx, %ecx");
asm("xor %edx, %edx");
asm("xor %cs, %cs");
asm("xor %ds, %ds");
asm("xor %es, %es");
asm("xor %fs, %fs");
asm("xor %gs, %gs");
asm("xor %ss, %ss");
asm("xor %esi, %esi");
asm("xor %edi, %edi");
asm("xor %ebp, %ebp");
asm("xor %esp, %esp");
asm("xor %cr0, %cr0");
asm("xor %cr1, %cr1");
asm("xor %cr2, %cr2");
asm("xor %cr3, %cr3");
asm("xor %cr4, %cr4");
asm("xor %cr8, %cr8");
Error: operand type mismatch for 'xor'
コンパイルしようとすると、最初の 4 つを除くすべてのレジスタについて表示されます。基本的に、すべてのレジスタの内容をゼロにする必要があります (その方法はわかりません)。どうやらrdx
重要な重要性の記録がありますか?しかし、ネットで調べてもリストが見つかりません。
次に、スタック ポインターを特定のメモリ位置に設定する必要があります。どうやってやるの?
最後に、jump
命令を呼び出して特定のメモリ位置に移動する必要があります。これどうやってするの?
助けてくれてありがとう!