コール命令のアドレスを無効にしようとすると、Program received signal SIGSEGV
エラーが発生します。
eax に呼び出し引数(アドレス0x8048579)のアドレスを格納し、edx(0xb7fb773a)に新しい値を格納します。 私の理解の指示に従ってmov %edx,(%eax)
はそうするべきですが、失敗します。
私は間違っていますか?
これには、本当のシステムはコードセクションへの書き込み時に受信信号SIGSEGVをプログラムします。
コード:-)傷つけるされていない、私の大学の作業の一部です:
0x08048566 <+35>: mov -0x8(%ebp),%edx
0x08048569 <+38>: mov -0x4(%ebp),%eax
=> 0x0804856c <+41>: mov %edx,(%eax) // Fails here.
0x0804856e <+43>: movl $0x0,(%esp)
0x08048575 <+50>: call 0x8048370 <[email protected]>
レジスタ:
eax 0x8048579 134514041
edx 0xb7fb773a -1208256710
失敗:
Program received signal SIGSEGV, Segmentation fault.
0x0804856c in foo (argv=0x58575655) at my_code.c:34
//アップデート1:CPU情報:
Architecture: i686
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 1
On-line CPU(s) list: 0
Thread(s) per core: 1
Core(s) per socket: 1
Socket(s): 1
Vendor ID: GenuineIntel
CPU family: 6
Model: 69
Stepping: 1
CPU MHz: 2306.609
BogoMIPS: 4613.21
L1d cache: 32K
L1d cache: 32K
L2d cache: 6144K
はそれをチェックする方法はあります:あなたはこの質問に対する答えに興味がある可能性があり
? – Tigran