前回のend of program
後に EBP
の値が0にならないのはバグでした。
neg
これを書いてる時点で3章12節まで進めているんですが、 前回の endbr64
同様に本書では紹介されていない命令が出てきたので...
Intelマニュアルによると指定したレジスタを2の補数で置換する命令とのことだったので、サクッと実装(フラグ周りの変更は放置中)
色々バグ
32bitsに対して8bitsの値を入れているために上24bitsが0埋めになることによるバグが潜んでいたので... (後はoverflowとか)
C言語って2の補数のマイナス値をu8
-> u32
したときに0埋めではなく1埋めになるんですかね? (あとCPUも)
ndisasm
使って眺めて見ても上位24bitsに対して何かしているように見えず... (なんででしょう)
Rustだからか、値の扱いが色々と難しい(適当に扱えない)