Revert "Don't raise in mach_data so the debugger doesn't catch it"
This reverts commit 4f8a3e2113c2e7b88600ff6371f9f70579c55509.
This commit is contained in:
parent
977a2ceae3
commit
85a9156c6f
@ -53,52 +53,51 @@ module MachO
|
||||
# /usr/include/mach-o/fat.h
|
||||
|
||||
def mach_data
|
||||
@mach_data ||= _mach_data
|
||||
end
|
||||
@mach_data ||= begin
|
||||
offsets = []
|
||||
mach_data = []
|
||||
|
||||
def _mach_data
|
||||
offsets = []
|
||||
mach_data = []
|
||||
|
||||
header = read(8).unpack("N2")
|
||||
case header[0]
|
||||
when 0xcafebabe # universal
|
||||
header[1].times do |i|
|
||||
# header[1] is the number of struct fat_arch in the file.
|
||||
# Each struct fat_arch is 20 bytes, and the 'offset' member
|
||||
# begins 8 bytes into the struct, with an additional 8 byte
|
||||
# offset due to the struct fat_header at the beginning of
|
||||
# the file.
|
||||
offsets << read(4, 20*i + 16).unpack("N")[0]
|
||||
header = read(8).unpack("N2")
|
||||
case header[0]
|
||||
when 0xcafebabe # universal
|
||||
header[1].times do |i|
|
||||
# header[1] is the number of struct fat_arch in the file.
|
||||
# Each struct fat_arch is 20 bytes, and the 'offset' member
|
||||
# begins 8 bytes into the struct, with an additional 8 byte
|
||||
# offset due to the struct fat_header at the beginning of
|
||||
# the file.
|
||||
offsets << read(4, 20*i + 16).unpack("N")[0]
|
||||
end
|
||||
when 0xcefaedfe, 0xcffaedfe, 0xfeedface, 0xfeedfacf # Single arch
|
||||
offsets << 0
|
||||
when 0x7f454c46 # ELF
|
||||
mach_data << { :arch => :x86_64, :type => :executable }
|
||||
else
|
||||
raise "Not a Mach-O binary."
|
||||
end
|
||||
when 0xcefaedfe, 0xcffaedfe, 0xfeedface, 0xfeedfacf # Single arch
|
||||
offsets << 0
|
||||
when 0x7f454c46 # ELF
|
||||
mach_data << { :arch => :x86_64, :type => :executable }
|
||||
else
|
||||
return []
|
||||
|
||||
offsets.each do |offset|
|
||||
arch = case read(8, offset).unpack("N2")
|
||||
when [0xcefaedfe, 0x07000000] then :i386
|
||||
when [0xcffaedfe, 0x07000001] then :x86_64
|
||||
when [0xfeedface, 0x00000012] then :ppc7400
|
||||
when [0xfeedfacf, 0x01000012] then :ppc64
|
||||
else :dunno
|
||||
end
|
||||
|
||||
type = case read(4, offset + 12).unpack("N")[0]
|
||||
when 0x00000002, 0x02000000 then :executable
|
||||
when 0x00000006, 0x06000000 then :dylib
|
||||
when 0x00000008, 0x08000000 then :bundle
|
||||
else :dunno
|
||||
end
|
||||
|
||||
mach_data << { :arch => arch, :type => type }
|
||||
end
|
||||
mach_data
|
||||
rescue
|
||||
[]
|
||||
end
|
||||
|
||||
offsets.each do |offset|
|
||||
arch = case read(8, offset).unpack("N2")
|
||||
when [0xcefaedfe, 0x07000000] then :i386
|
||||
when [0xcffaedfe, 0x07000001] then :x86_64
|
||||
when [0xfeedface, 0x00000012] then :ppc7400
|
||||
when [0xfeedfacf, 0x01000012] then :ppc64
|
||||
else :dunno
|
||||
end
|
||||
|
||||
type = case read(4, offset + 12).unpack("N")[0]
|
||||
when 0x00000002, 0x02000000 then :executable
|
||||
when 0x00000006, 0x06000000 then :dylib
|
||||
when 0x00000008, 0x08000000 then :bundle
|
||||
else :dunno
|
||||
end
|
||||
|
||||
mach_data << { :arch => arch, :type => type }
|
||||
end
|
||||
|
||||
mach_data
|
||||
end
|
||||
|
||||
def archs
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user