1

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命令を呼び出して特定のメモリ位置に移動する必要があります。これどうやってするの?

助けてくれてありがとう!

4

2 に答える 2