08.02.2016, 15:12
(04.02.2016, 10:50)Jandor schrieb: Es gilt drei bestimmte Zahlen (die Gegner IDs von Räuber, Räuber, Thorwaler) mit möglichst wenig 'Spacer'-Code dazwischen zu finden. Heißt: alle drei Zahlen sind in einem Codeabschnitt von sagen wir mal 40-60Byte, so unübersichtlich häufig wird das hoffentlich nicht vorkommen.
Kann da vielleicht ein versierter Trixer irgendwie weiterhelfen? Ich vermute nämlich stark, dass eine solche Suche für den Kenner eine triviale Angelegenheit darstellt und ich einfach nur zu ahnungslos an die Sache herangehe
Ich hab mal eben schnell mit Ruby was gebastelt. Wenn man dem als Parameter einen Dateinamen, eine Suchbreite (in deinem Fall z.B. 60) und eine (space-separierte) Liste mit vorkommenden Bytefolgen (als 'reine' Hex-Zahlen, also ohne 0x davor) angibt, sucht das Skript einem solche Stellen heraus.
Die Reihenfolge ist dabei entscheidend, du musst also hier schlimmstenfalls 3 Varianten probieren (Räuber-Räuber-Thorwaler, R-T-R, T-R-R)
Code:
def searchnear(data, maxdist, arr)
idx1 = 0
dist = 0
while (idx1 = data.index(arr[0], idx1))
break if idx1 == nil
idx2 = idx1
found= true
for j in 1...arr.size
idx2 = data.index(arr[j], idx2)
if idx2 == nil || idx2 - idx1 > maxdist
found = false
break
end
end
if found then puts "found occurrence at indices 0x#{idx1.to_s(16)}..0x#{idx2.to_s(16)}"; end
idx1+= 1
end
end
data = File.open(ARGV.shift).read
maxdist = ARGV.shift.to_i
search = ARGV.map{|str| str.scan(/../).map{|x| x.hex.chr}.join}
searchnear(data, maxdist, search)
Beispielsweise findet
ruby searchnear.rb SCHWEIF.EXE 40 17 43 43
dutzende Resultate. Da du dich in der .exe wohl besser auskennst, kannst du damit sicherlich mehr anfangen.
Hallo, ich bin's - der Bart von Fidel Castro. Und mir ist total langweilich nie geschnitten wurde.
I'm a roleplayer. My dice are like my relationships: platonic and unlucky.
I'm a roleplayer. My dice are like my relationships: platonic and unlucky.