LoginSignup
1
2

More than 5 years have passed since last update.

assembly の opcode を調べる、またはその逆 on macOS

Posted at

泥臭い方法だけど、特に何も追加インストールする必要なくお手軽。

assembly -> opcode

アセンブルしてディスアセンブルする。otool-j オプションで opcode も表示できる

opcode.rb
#!/usr/bin/env ruby

require 'tmpdir'

asm = ARGV.join(" ")
Dir.mktmpdir do |dir|
  File.write("#{dir}/tmp.S", asm)
  system("as #{dir}/tmp.S -o #{dir}/tmp.o")
  system("otool -tvj #{dir}/tmp.o")
end

実行例

$ opcode.rb 'nop; mov $0x2,%rax'
/var/folders/.../tmp.o:
(__TEXT,__text) section
0000000000000000 90    nop
0000000000000001 48 c7 c0 02 00 00 00 movq $0x2, %rax

opcode -> assembly

.byte で詰め込んでアセンブルしてディスアセンブルする。

disas.rb
#!/usr/bin/env ruby

require 'tmpdir'

asm = ".byte 0x" + ARGV.join.scan(/[0-9a-fA-F]{2}/).join(",0x")
Dir.mktmpdir do |dir|
  File.write("#{dir}/tmp.S", asm)
  system("as #{dir}/tmp.S -o #{dir}/tmp.o")
  system("otool -tvj #{dir}/tmp.o")
end

実行例

$ disas.rb 48c7c00200000090
/var/folders/.../tmp.o:
(__TEXT,__text) section
0000000000000000 48 c7 c0 02 00 00 00 movq $0x2, %rax
0000000000000007 90    nop
1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2