Module: Unarm
- Extended by:
- UnarmBind
- Defined in:
- lib/unarm/unarm.rb
Defined Under Namespace
Modules: CPU
Classes: ArmIns, Data, Ins, Parser, RawSymbols, Symbol, Symbols, ThumbIns
Constant Summary
Constants included
from UnarmBind
UnarmBind::ARGUMENT_KIND, UnarmBind::ARGUMENT_KIND_MAP, UnarmBind::Arg, UnarmBind::Args, UnarmBind::CONDITION, UnarmBind::CONDITION_MAP, UnarmBind::CO_REG, UnarmBind::CO_REG_MAP, UnarmBind::ENDIAN, UnarmBind::ENDIAN_MAP, UnarmBind::OPCODE, UnarmBind::OPCODE_MNEMONIC, UnarmBind::REGISTER, UnarmBind::REGISTER_MAP, UnarmBind::SHIFT, UnarmBind::SHIFT_MAP, UnarmBind::STATUS_REG, UnarmBind::STATUS_REG_MAP
Class Method Summary
collapse
Class Method Details
.cpu ⇒ Object
410
|
# File 'lib/unarm/unarm.rb', line 410
def self.cpu = @cpu
|
.get_raw_symbols(loc) ⇒ Object
Also known as:
get_raw_syms
595
596
597
598
599
600
|
# File 'lib/unarm/unarm.rb', line 595
def self.get_raw_symbols(loc)
syms = loc == 'arm7' ? @symbols7 : @symbols9
loc = 'arm9' if !syms.locs.has_key?(loc)
locs = %w[arm7 arm9].include?(loc) ? [loc] : ['arm9', loc]
@raw_syms[loc] ||= RawSymbols.new(Symbols.new(syms: syms, locs: locs))
end
|
.load_symbols7(file_path) ⇒ Object
581
582
583
|
# File 'lib/unarm/unarm.rb', line 581
def self.load_symbols7(file_path)
@symbols7 = Symbols.new(file_path: file_path)
end
|
.load_symbols9(file_path) ⇒ Object
577
578
579
|
# File 'lib/unarm/unarm.rb', line 577
def self.load_symbols9(file_path)
@symbols9 = Symbols.new(file_path: file_path)
end
|
.raw_syms ⇒ Object
419
|
# File 'lib/unarm/unarm.rb', line 419
def self.raw_syms = @raw_syms
|
.shitty_demangle(sym) ⇒ Object
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
|
# File 'lib/unarm/unarm.rb', line 421
def self.shitty_demangle(sym)
return sym unless sym.start_with?('_Z')
sym = sym[2..]
is_vtable = false
if sym.start_with? 'NK'
sym = sym[2..]
elsif sym.start_with? 'N'
sym = sym[1..]
elsif sym.start_with? 'TV'
sym = sym[(sym[2] == 'N' ? 3 : 2)..]
is_vtable = true
end
names = []
loop do
break if sym.nil? || sym.empty? || !sym[0].match?(/\d/)
len_end = sym.index(/\D/)
n_len = Integer(sym[...len_end], exception: false)
n = sym[len_end, n_len]
names << n
sym = sym[len_end + n_len..]
end
unless sym.nil?
if sym.start_with? 'nw'
names << 'new'
elsif sym.start_with? 'na'
names << 'new[]'
elsif sym.start_with? 'dl'
names << 'delete'
elsif sym.start_with? 'da'
names << 'delete[]'
elsif sym.start_with? 'eq'
names << '=='
elsif sym.start_with? 'ne'
names << '!='
elsif sym.match? /[DC]\d/
names << sym[..1]
end
end
names.join('::') + (is_vtable ? '::vtable' : '')
end
|
.symbol_map ⇒ Object
Also known as:
sym_map
585
586
587
588
589
590
591
592
593
|
# File 'lib/unarm/unarm.rb', line 585
def self.symbol_map
if @cpu == CPU::ARM9
raise 'Symbols9 not loaded' if !@symbols9
@symbols9.map
else
raise 'Symbols7 not loaded' if !@symbols7
@symbols7.map
end
end
|
.symbols ⇒ Object
415
416
417
|
# File 'lib/unarm/unarm.rb', line 415
def self.symbols
@cpu == CPU::ARM9 ? symbols9 : symbols7
end
|
.symbols7 ⇒ Object
413
|
# File 'lib/unarm/unarm.rb', line 413
def self.symbols7 = @symbols7
|
.symbols9 ⇒ Object
412
|
# File 'lib/unarm/unarm.rb', line 412
def self.symbols9 = @symbols9
|
.use_arm7 ⇒ Object
406
407
408
|
# File 'lib/unarm/unarm.rb', line 406
def self.use_arm7
@cpu = CPU::ARM7
end
|
.use_arm9 ⇒ Object
402
403
404
|
# File 'lib/unarm/unarm.rb', line 402
def self.use_arm9
@cpu = CPU::ARM9
end
|