Skip to content

Conversation

@rlcevg
Copy link
Contributor

@rlcevg rlcevg commented Dec 28, 2021

Warning: stacktrace_translator.py became python3.
Added to ignore local virtualenv files.
pip install -r requirements.txt installs requirements (only pefile and its dependency so far).

EXEBASE is unfortunately global, as required only once for spring.exe module.

Running as XMLRPC server was not tested.

@Beherith
Copy link
Contributor

I tested it with engine 714, and this infolog (that is known to crash in Barb), and I got an empty translation, even for engine symbols.

https://logs.springrts.com/logfiles/7471/

Result of translation:
`

module address file line
C:\Users\Administrator\AppData\Local\Programs\Beyond-All-Reason\data\engine\105.1.1-714-ge909643 bar\AI\Skirmish\BARb\stable\SkirmishAI.dll 0x20aa9f08daf ?? 0
C:\Users\Administrator\AppData\Local\Programs\Beyond-All-Reason\data\engine\105.1.1-714-ge909643 bar\AI\Skirmish\BARb\stable\SkirmishAI.dll 0x20aa9f3a980 ?? 0
C:\Users\Administrator\AppData\Local\Programs\Beyond-All-Reason\data\engine\105.1.1-714-ge909643 bar\AI\Skirmish\BARb\stable\SkirmishAI.dll 0x20aa9f31a19 ?? 0
C:\Users\Administrator\AppData\Local\Programs\Beyond-All-Reason\data\engine\105.1.1-714-ge909643 bar\AI\Skirmish\BARb\stable\SkirmishAI.dll 0x20aa9f36870 ?? 0
C:\Users\Administrator\AppData\Local\Programs\Beyond-All-Reason\data\engine\105.1.1-714-ge909643 bar\AI\Skirmish\BARb\stable\SkirmishAI.dll 0x20aa9eb405b ?? 0
C:\Users\Administrator\AppData\Local\Programs\Beyond-All-Reason\data\engine\105.1.1-714-ge909643 bar\AI\Skirmish\BARb\stable\SkirmishAI.dll 0x20aa9f0cf3a ?? 0
C:\Users\Administrator\AppData\Local\Programs\Beyond-All-Reason\data\engine\105.1.1-714-ge909643 bar\AI\Skirmish\BARb\stable\SkirmishAI.dll 0x20aa9ea5fe8 ?? 0
C:\Users\Administrator\AppData\Local\Programs\Beyond-All-Reason\data\engine\105.1.1-714-ge909643 bar\AI\Skirmish\BARb\stable\SkirmishAI.dll 0x20aa9ead6c3 ?? 0
C:\Users\Administrator\AppData\Local\Programs\Beyond-All-Reason\data\engine\105.1.1-714-ge909643 bar\AI\Skirmish\BARb\stable\SkirmishAI.dll 0x20aa9ea23f7 ?? 0
C:\Users\Administrator\AppData\Local\Programs\Beyond-All-Reason\data\engine\105.1.1-714-ge909643 bar\spring.exe 0x2084058e79b ?? 0
C:\Users\Administrator\AppData\Local\Programs\Beyond-All-Reason\data\engine\105.1.1-714-ge909643 bar\spring.exe 0x20840593fc5 ?? 0
C:\Users\Administrator\AppData\Local\Programs\Beyond-All-Reason\data\engine\105.1.1-714-ge909643 bar\spring.exe 0x2084056aec1 ?? 0
C:\Users\Administrator\AppData\Local\Programs\Beyond-All-Reason\data\engine\105.1.1-714-ge909643 bar\spring.exe 0x2084002fee8 ?? 0
C:\Users\Administrator\AppData\Local\Programs\Beyond-All-Reason\data\engine\105.1.1-714-ge909643 bar\spring.exe 0x2084014face ?? 0
C:\Users\Administrator\AppData\Local\Programs\Beyond-All-Reason\data\engine\105.1.1-714-ge909643 bar\spring.exe 0x20840037545 ?? 0
C:\Users\Administrator\AppData\Local\Programs\Beyond-All-Reason\data\engine\105.1.1-714-ge909643 bar\spring.exe 0x208404c2a7c ?? 0
C:\Users\Administrator\AppData\Local\Programs\Beyond-All-Reason\data\engine\105.1.1-714-ge909643 bar\spring.exe 0x208404c5de8 ?? 0
C:\Users\Administrator\AppData\Local\Programs\Beyond-All-Reason\data\engine\105.1.1-714-ge909643 bar\spring.exe 0x208404ae70c ?? 0
C:\Users\Administrator\AppData\Local\Programs\Beyond-All-Reason\data\engine\105.1.1-714-ge909643 bar\spring.exe 0x208400013c1 ?? 0
C:\Users\Administrator\AppData\Local\Programs\Beyond-All-Reason\data\engine\105.1.1-714-ge909643 bar\spring.exe 0x208400014d6 ?? 0
`

@Beherith Beherith closed this Dec 30, 2021
@Beherith
Copy link
Contributor

How did you test without xmlrpc? As i tested with it.

@Beherith Beherith reopened this Dec 30, 2021
@rlcevg
Copy link
Contributor Author

rlcevg commented Dec 30, 2021

It works with fixed Win64 crash-handler. 105.1.1-714-ge909643 doesn't provide exe load address

beyond-all-reason/RecoilEngine@925e1ed
engine >= 105.1.1-718-g925e1ed required


Local test without xmlrpc: stacktrace_translator.py <infolog.txt> <dir_with_spring_dbg.7z>
example when everything in the same folder:
$ python3 stacktrace_translator.py infolog.txt ./

@rlcevg
Copy link
Contributor Author

rlcevg commented Dec 30, 2021

For DLLs infolog stores only offsets from ImageBase, thus it's safe to assume that it will never be > low 32bit (4GB dll won't happen soon).

pe = pefile.PE(name=tempfile.name, fast_load=True)
image_base = pe.OPTIONAL_HEADER.ImageBase
load_base = 0 if module.endswith('.dll') else EXEBASE
return [hex(int(x, 16) - load_base + image_base) for x in addresses]
Copy link
Contributor Author

@rlcevg rlcevg Dec 30, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

return [hex(int(x, 16) & 0xFFFFFFFF - load_base + image_base) for x in addresses]
could work for current broken crashhandler, but it would be unexplained hax. Also exe in this case would require different treatment

@Beherith
Copy link
Contributor

Beherith commented Jan 1, 2022

Ok, thanks dude, ill deploy once we update engine :)

@rlcevg
Copy link
Contributor Author

rlcevg commented Jan 8, 2022

This can be useful, as parsing some infolog crashed:

diff --git a/stacktrace_translator.py b/stacktrace_translator.py
index 2ae4d37..a4857b6 100644
--- a/stacktrace_translator.py
+++ b/stacktrace_translator.py
@@ -353,7 +353,12 @@ def translate_module_addresses(module, debugarchive, addresses, debugfile):
                        if psu in file:
                                file = file[file.index(psu)+len(psu):]
                                break
-               return module, addr, file, int(line)
+               line_int = line
+               try:
+                       line_int = int(line)
+               except ValueError:
+                       pass
+               return module, addr, file, line_int
 
        return [fixup(addr, *line.split(':')) for addr, line in zip(addresses, stdout.decode('utf-8').splitlines())]

But i don't know why int(line) required at all, shouldn't raw line value work? so not PRing additional monstrosity.

@rlcevg
Copy link
Contributor Author

rlcevg commented Feb 14, 2022

So, it's time to apply this PR.
Next translations are nonsense:
https://github.com/beyond-all-reason/BARbarIAn/issues/16
https://github.com/beyond-all-reason/BARbarIAn/issues/17

First line after spring passes control to AI from rts/ExternalAI/SkirmishAIHandler.h should be https://github.com/rlcevg/CircuitAI/blob/49b99e9cc5617ea985bd35facccde0816d60c384/src/AIExport.cpp#L75:

(gdb) info line *(0x3a9ea0000 + 0x23f7)
Line 75 of "/spring/AI/Skirmish/BARb/src/AIExport.cpp" starts at address 0x3a9ea23f7 <handleEvent(int, int, void const*)+151>
   and ends at 0x3a9ea23f8 <handleEvent(int, int, void const*)+152>.

@Beherith
Copy link
Contributor

Ok, bumping priority on this

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants