私は Jeff Duntemann の本を勉強しています: Step by Step Assembly です。提供されるソースコードは次のとおりです。
SECTION .data ; Section containing initialised data
EatMsg: db "Eat at Joe's!",10
EatLen: equ $-EatMsg
SECTION .bss ; Section containing uninitialized data
SECTION .text ; Section containing code
global _start ; Linker needs this to find the entry point!
_start:
nop ; This no-op keeps gdb happy...
mov eax,4 ; Specify sys_write call
mov ebx,1 ; Specify File Descriptor 1: Standard Output
mov ecx,EatMsg ; Pass offset of the message
mov edx,EatLen ; Pass the length of the message
int 80H ; Make kernel call
MOV eax,1 ; Code for Exit Syscall
mov ebx,0 ; Return a code of zero
int 80H ; Make kernel call
64 ビット MacOS Yosemite 上の VirtualBoxVM で Ubuntu 12.04 32 ビットを実行しています。
呼んでいます:
kdbg eatsyscall
KDBG を起動します。
時計セクションには、EatMsg と EatLen の 2 つの式があります。
EatMsg に KDBG を使用してコードを実行すると、次のように表示されます: 544497989が、EatLen では次のように表示されます: 0xe でメモリにアクセスできません
2 つの質問があります。
この 544497989 の値は何ですか? EatLen で「アクセスできません」というメッセージが表示されるのはなぜですか?