NationalSecurityAgency / ghidra

Ghidra is a software reverse engineering (SRE) framework
https://www.nsa.gov/ghidra
Apache License 2.0
50.63k stars 5.79k forks source link

PDB Universal unable to apply Global Symbol of Unicode name #5200

Closed wichiandyx closed 1 year ago

wichiandyx commented 1 year ago

Describe the bug When begin the analysis, the PDB then try to parse the symbol, and then freezes. I then checked the content of the PDB and some of it contains unicode name.

To Reproduce Steps to reproduce the behavior:

  1. Load the GameServer.exe
  2. Start Analyze the GameServer.exe with PDB option : PDB Universal
  3. Ghidra then try to load and parse the PDB
  4. After reaching the [PDB : Applying global symbols], ghidra then freezes. image

Expected behavior PDB Universal should be able to load Unicode name or use generic name to pass them.

Attachments I've already attached the program along with the debug files in order to easily reproduce the problem GameServer.zip

Environment (please complete the following information):

ghizard commented 1 year ago

Are you familiar with how to use the PDB MSDIA Analyzer? If so, perhaps you can try that to see if it reveals anything more. Or maybe it will work to completion for you.

When building the PDB Universal, we added the ability to try to set the character sets that are being used for 8-bit and 16-bit characters, though those do not seem to be exposed in our GUI configurations. Otherwise, I'd ask you to explore those. I'm not an expert at these, so I lean on other developers when I work in this area.

I'm able to run a dump script of the PDB, which does not appear to have a problem, so it there might be a problem with either the PDB Universal applicator or other parts of Ghidra, though they are also built to handle various charsets. It could be that we overlooked something somewhere such that you are having this problem.

wichiandyx commented 1 year ago

Hello ghizard, thanks for the reply :D I've also tried with PDB MSDIA as well, however it gives error like this, and skipping the PDB parsing and loading image

ghizard commented 1 year ago

Regarding PDB MSDIA... It seems that that is another issue that you've uncovered; we will have to discuss what we should do about that, which is the proper escaping of certain text fields that go into the XML file.

Regarding PDB Universal...

From my investigations, I do not see any unicode/charset issues. That does not mean these do not exist, and there could be a difference in our setups that cause you to see the issue where I do not. There are other lines of investigation you can pursue; one is memory the other is more diagnosis for where it seems to be getting stuck.

One tack: You might need to configure your Ghidra JVM to have more memory. Check #1997 about how to increase the memory in your JVM. It might take more than you might think or have to process and it might be taking too much time swapping memory.

Another tack: Does the PDB Universal Analyzer always freeze at the same location: 278 of 1894 of the Global Symbols?

A thread dump would be helpful to see what is going on for you.

Once you are in the bad state, from the command shell (I think they are applicable here on Windows), run:

jps (to get the pid of the Ghidra process) jstack (to get the application thread state)

These command should be in the bin dir of the jdk installation.

wichiandyx commented 1 year ago

Hi ghizard :D

Another tack: Does the PDB Universal Analyzer always freeze at the same location: 278 of 1894 of the Global Symbols?

It sometimes in 257, sometimes in the 300, the number varies but once it hits something the ghidra then just freezes image

Regarding PDB Universal, I've tried to left ghidra run overnight while trying to increase the memory (the MAX_MEM parameter), surprisingly it throws potential deadlock exception and just skip the pdb and continue the analysis. It gives 2 exception message as following : image image

A thread dump would be helpful to see what is going on for you.

Once you are in the bad state, from the command shell (I think they are applicable here on Windows), run:

jps (to get the pid of the Ghidra process) jstack (to get the application thread state)

I've tried to dump it when it freezes, I saw "AWT-EventQueue-0" looping endlessly.

Here's my full dump using jstack :

2023-04-12 00:31:17 Full thread dump Java HotSpot(TM) 64-Bit Server VM (17.0.4.1+1-LTS-2 mixed mode):

Threads class SMR info: _java_thread_list=0x0000024d2739c300, length=29, elements={ 0x0000024d222ae4f0, 0x0000024d22c03840, 0x0000024d22c2d870, 0x0000024d22c30540, 0x0000024d22c315a0, 0x0000024d22c64840, 0x0000024d22c65bd0, 0x0000024d22c67080, 0x0000024d22c708f0, 0x0000024d22de8030, 0x0000024d22e221d0, 0x0000024d231efa60, 0x0000024d231fdbb0, 0x0000024d231c0e00, 0x0000024d7fc12af0, 0x0000024d2500f070, 0x0000024d238b8a30, 0x0000024d238b63b0, 0x0000024d238b7220, 0x0000024d238b8f00, 0x0000024d238b8560, 0x0000024d238b8090, 0x0000024d25ba5000, 0x0000024d25ba37f0, 0x0000024d25ba89c0, 0x0000024d25ba6810, 0x0000024d25ba7680, 0x0000024d238b5540, 0x0000024d2a978bd0 }

"Reference Handler" #2 daemon prio=10 os_prio=2 cpu=11921.88ms elapsed=335.19s allocated=0B defined_classes=0 tid=0x0000024d222ae4f0 nid=0x11ec70 waiting on condition [0x0000006fee0ff000] java.lang.Thread.State: RUNNABLE at java.lang.ref.Reference.waitForReferencePendingList(java.base@17.0.4.1/Native Method) at java.lang.ref.Reference.processPendingReferences(java.base@17.0.4.1/Reference.java:253) at java.lang.ref.Reference$ReferenceHandler.run(java.base@17.0.4.1/Reference.java:215)

Locked ownable synchronizers:

  • None

"Finalizer" #3 daemon prio=8 os_prio=1 cpu=0.00ms elapsed=335.19s allocated=560B defined_classes=1 tid=0x0000024d22c03840 nid=0x118938 in Object.wait() [0x0000006fee1ff000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(java.base@17.0.4.1/Native Method)

  • waiting on at java.lang.ref.ReferenceQueue.remove(java.base@17.0.4.1/ReferenceQueue.java:155)
  • locked <0x00000006c00adf98> (a java.lang.ref.ReferenceQueue$Lock) at java.lang.ref.ReferenceQueue.remove(java.base@17.0.4.1/ReferenceQueue.java:176) at java.lang.ref.Finalizer$FinalizerThread.run(java.base@17.0.4.1/Finalizer.java:172)

    Locked ownable synchronizers:

  • None

"Signal Dispatcher" #4 daemon prio=9 os_prio=2 cpu=0.00ms elapsed=335.18s allocated=0B defined_classes=0 tid=0x0000024d22c2d870 nid=0x11e4f0 waiting on condition [0x0000000000000000] java.lang.Thread.State: RUNNABLE

Locked ownable synchronizers:

  • None

"Attach Listener" #5 daemon prio=5 os_prio=2 cpu=0.00ms elapsed=335.18s allocated=0B defined_classes=0 tid=0x0000024d22c30540 nid=0x11f848 waiting on condition [0x0000000000000000] java.lang.Thread.State: RUNNABLE

Locked ownable synchronizers:

  • None

"Service Thread" #6 daemon prio=9 os_prio=0 cpu=15.62ms elapsed=335.18s allocated=0B defined_classes=0 tid=0x0000024d22c315a0 nid=0x11f84c runnable [0x0000000000000000] java.lang.Thread.State: RUNNABLE

Locked ownable synchronizers:

  • None

"Monitor Deflation Thread" #7 daemon prio=9 os_prio=0 cpu=0.00ms elapsed=335.18s allocated=0B defined_classes=0 tid=0x0000024d22c64840 nid=0x1187d4 runnable [0x0000000000000000] java.lang.Thread.State: RUNNABLE

Locked ownable synchronizers:

  • None

"C2 CompilerThread0" #8 daemon prio=9 os_prio=2 cpu=60078.12ms elapsed=335.18s allocated=136B defined_classes=0 tid=0x0000024d22c65bd0 nid=0x11f854 runnable [0x0000000000000000] java.lang.Thread.State: RUNNABLE No compile task

Locked ownable synchronizers:

  • None

"C1 CompilerThread0" #10 daemon prio=9 os_prio=2 cpu=7015.62ms elapsed=335.18s allocated=53064B defined_classes=0 tid=0x0000024d22c67080 nid=0x118850 runnable [0x0000000000000000] java.lang.Thread.State: RUNNABLE No compile task

Locked ownable synchronizers:

  • None

"Sweeper thread" #11 daemon prio=9 os_prio=2 cpu=359.38ms elapsed=335.18s allocated=0B defined_classes=0 tid=0x0000024d22c708f0 nid=0x118dd8 runnable [0x0000000000000000] java.lang.Thread.State: RUNNABLE

Locked ownable synchronizers:

  • None

"Common-Cleaner" #12 daemon prio=8 os_prio=1 cpu=15.62ms elapsed=335.14s allocated=13672B defined_classes=0 tid=0x0000024d22de8030 nid=0x11f850 in Object.wait() [0x0000006feeaff000] java.lang.Thread.State: TIMED_WAITING (on object monitor) at java.lang.Object.wait(java.base@17.0.4.1/Native Method)

  • waiting on at java.lang.ref.ReferenceQueue.remove(java.base@17.0.4.1/ReferenceQueue.java:155)
  • locked <0x00000006c00b4e10> (a java.lang.ref.ReferenceQueue$Lock) at jdk.internal.ref.CleanerImpl.run(java.base@17.0.4.1/CleanerImpl.java:140) at java.lang.Thread.run(java.base@17.0.4.1/Thread.java:833) at jdk.internal.misc.InnocuousThread.run(java.base@17.0.4.1/InnocuousThread.java:162)

    Locked ownable synchronizers:

  • None

"Notification Thread" #13 daemon prio=9 os_prio=0 cpu=0.00ms elapsed=335.10s allocated=0B defined_classes=0 tid=0x0000024d22e221d0 nid=0x11f844 runnable [0x0000000000000000] java.lang.Thread.State: RUNNABLE

Locked ownable synchronizers:

  • None

"Java2D Disposer" #14 daemon prio=10 os_prio=2 cpu=0.00ms elapsed=335.00s allocated=160B defined_classes=0 tid=0x0000024d231efa60 nid=0x11f6d0 in Object.wait() [0x0000006feedff000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(java.base@17.0.4.1/Native Method)

  • waiting on at java.lang.ref.ReferenceQueue.remove(java.base@17.0.4.1/ReferenceQueue.java:155)
  • locked <0x00000006c00a73c8> (a java.lang.ref.ReferenceQueue$Lock) at java.lang.ref.ReferenceQueue.remove(java.base@17.0.4.1/ReferenceQueue.java:176) at sun.java2d.Disposer.run(java.desktop@17.0.4.1/Disposer.java:145) at java.lang.Thread.run(java.base@17.0.4.1/Thread.java:833)

    Locked ownable synchronizers:

  • None

"AWT-Windows" #16 daemon prio=6 os_prio=0 cpu=3437.50ms elapsed=334.99s allocated=1839K defined_classes=25 tid=0x0000024d231fdbb0 nid=0x11f5d8 runnable [0x0000006feefff000] java.lang.Thread.State: RUNNABLE at sun.awt.windows.WToolkit.eventLoop(java.desktop@17.0.4.1/Native Method) at sun.awt.windows.WToolkit.run(java.desktop@17.0.4.1/WToolkit.java:365) at java.lang.Thread.run(java.base@17.0.4.1/Thread.java:833)

Locked ownable synchronizers:

  • None

"Swing-Shell" #19 daemon prio=10 os_prio=2 cpu=15.62ms elapsed=334.97s allocated=16856B defined_classes=14 tid=0x0000024d231c0e00 nid=0x11f85c waiting on condition [0x0000006fef0fe000] java.lang.Thread.State: WAITING (parking) at jdk.internal.misc.Unsafe.park(java.base@17.0.4.1/Native Method)

  • parking to wait for <0x00000006c00a7a28> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject) at java.util.concurrent.locks.LockSupport.park(java.base@17.0.4.1/LockSupport.java:341) at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(java.base@17.0.4.1/AbstractQueuedSynchronizer.java:506) at java.util.concurrent.ForkJoinPool.unmanagedBlock(java.base@17.0.4.1/ForkJoinPool.java:3463) at java.util.concurrent.ForkJoinPool.managedBlock(java.base@17.0.4.1/ForkJoinPool.java:3434) at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(java.base@17.0.4.1/AbstractQueuedSynchronizer.java:1623) at java.util.concurrent.LinkedBlockingQueue.take(java.base@17.0.4.1/LinkedBlockingQueue.java:435) at java.util.concurrent.ThreadPoolExecutor.getTask(java.base@17.0.4.1/ThreadPoolExecutor.java:1062) at java.util.concurrent.ThreadPoolExecutor.runWorker(java.base@17.0.4.1/ThreadPoolExecutor.java:1122) at java.util.concurrent.ThreadPoolExecutor$Worker.run(java.base@17.0.4.1/ThreadPoolExecutor.java:635) at sun.awt.shell.Win32ShellFolderManager2$ComInvoker$1.run(java.desktop@17.0.4.1/Win32ShellFolderManager2.java:595) at java.lang.Thread.run(java.base@17.0.4.1/Thread.java:833)

    Locked ownable synchronizers:

  • None

"DestroyJavaVM" #21 prio=5 os_prio=0 cpu=1562.50ms elapsed=333.04s allocated=480B defined_classes=0 tid=0x0000024d7fc12af0 nid=0x11ed88 waiting on condition [0x0000000000000000] java.lang.Thread.State: RUNNABLE

Locked ownable synchronizers:

  • None

"Log4j2-TF-3-Scheduled-1" #24 daemon prio=5 os_prio=0 cpu=0.00ms elapsed=331.04s allocated=14760B defined_classes=5 tid=0x0000024d2500f070 nid=0x11f700 waiting on condition [0x0000006fef4fe000] java.lang.Thread.State: TIMED_WAITING (parking) at jdk.internal.misc.Unsafe.park(java.base@17.0.4.1/Native Method)

  • parking to wait for <0x00000006c0e002e0> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject) at java.util.concurrent.locks.LockSupport.parkNanos(java.base@17.0.4.1/LockSupport.java:252) at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(java.base@17.0.4.1/AbstractQueuedSynchronizer.java:1672) at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(java.base@17.0.4.1/ScheduledThreadPoolExecutor.java:1182) at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(java.base@17.0.4.1/ScheduledThreadPoolExecutor.java:899) at java.util.concurrent.ThreadPoolExecutor.getTask(java.base@17.0.4.1/ThreadPoolExecutor.java:1062) at java.util.concurrent.ThreadPoolExecutor.runWorker(java.base@17.0.4.1/ThreadPoolExecutor.java:1122) at java.util.concurrent.ThreadPoolExecutor$Worker.run(java.base@17.0.4.1/ThreadPoolExecutor.java:635) at java.lang.Thread.run(java.base@17.0.4.1/Thread.java:833)

    Locked ownable synchronizers:

  • None

"AWT-Shutdown" #30 prio=5 os_prio=0 cpu=0.00ms elapsed=329.64s allocated=0B defined_classes=0 tid=0x0000024d238b8a30 nid=0x11d880 in Object.wait() [0x0000006fef9ff000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(java.base@17.0.4.1/Native Method)

  • waiting on at java.lang.Object.wait(java.base@17.0.4.1/Object.java:338) at sun.awt.AWTAutoShutdown.run(java.desktop@17.0.4.1/AWTAutoShutdown.java:291)
  • locked <0x00000006c0008bb0> (a java.lang.Object) at java.lang.Thread.run(java.base@17.0.4.1/Thread.java:833)

    Locked ownable synchronizers:

  • None

"AWT-EventQueue-0" #29 prio=6 os_prio=0 cpu=170687.50ms elapsed=329.64s allocated=59020M defined_classes=5844 tid=0x0000024d238b63b0 nid=0x11dbf0 runnable [0x0000006fefafd000] java.lang.Thread.State: RUNNABLE at ghidra.program.database.map.AddressMapDB.encodeRelative(AddressMapDB.java:625) at ghidra.program.database.map.AddressMapDB.getKey(AddressMapDB.java:268)

  • locked <0x00000006c4d309b8> (a ghidra.program.database.map.AddressMapDB) at ghidra.program.database.code.DataDB.getComponent(DataDB.java:236) at ghidra.program.util.DefinedDataIterator$DataComponentIterator.next(DefinedDataIterator.java:251) at ghidra.program.util.DefinedDataIterator.findNext(DefinedDataIterator.java:173) at ghidra.program.util.DefinedDataIterator.hasNext(DefinedDataIterator.java:147) at ghidra.app.plugin.core.strings.ViewStringsTableModel.addDataInstance(ViewStringsTableModel.java:144) at ghidra.app.plugin.core.strings.ViewStringsProvider.add(ViewStringsProvider.java:186) at ghidra.app.plugin.core.strings.ViewStringsPlugin.domainObjectChanged(ViewStringsPlugin.java:230) at ghidra.framework.data.DomainObjectChangeSupport$EventNotification.doNotify(DomainObjectChangeSupport.java:297) at ghidra.framework.data.DomainObjectChangeSupport.doSendEventsNow(DomainObjectChangeSupport.java:164) at ghidra.framework.data.DomainObjectChangeSupport.lambda$sendEventNow$3(DomainObjectChangeSupport.java:158) at ghidra.framework.data.DomainObjectChangeSupport$$Lambda$903/0x00000007c0c12728.run(Unknown Source) at ghidra.util.Swing.doRun(Swing.java:292) at ghidra.util.Swing.runNow(Swing.java:208) at ghidra.util.Swing.runNow(Swing.java:163) at ghidra.framework.data.DomainObjectChangeSupport.sendEventNow(DomainObjectChangeSupport.java:158) at ghidra.framework.data.DomainObjectChangeSupport$$Lambda$870/0x00000007c0bf1a80.timerFired(Unknown Source) at generic.timer.GhidraSwingTimer.actionPerformed(GhidraSwingTimer.java:45) at javax.swing.Timer.fireActionPerformed(java.desktop@17.0.4.1/Timer.java:311) at javax.swing.Timer$DoPostEvent.run(java.desktop@17.0.4.1/Timer.java:243) at java.awt.event.InvocationEvent.dispatch(java.desktop@17.0.4.1/InvocationEvent.java:318) at java.awt.EventQueue.dispatchEventImpl(java.desktop@17.0.4.1/EventQueue.java:771) at java.awt.EventQueue$4.run(java.desktop@17.0.4.1/EventQueue.java:722) at java.awt.EventQueue$4.run(java.desktop@17.0.4.1/EventQueue.java:716) at java.security.AccessController.executePrivileged(java.base@17.0.4.1/AccessController.java:776) at java.security.AccessController.doPrivileged(java.base@17.0.4.1/AccessController.java:399) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(java.base@17.0.4.1/ProtectionDomain.java:86) at java.awt.EventQueue.dispatchEvent(java.desktop@17.0.4.1/EventQueue.java:741) at java.awt.EventDispatchThread.pumpOneEventForFilters(java.desktop@17.0.4.1/EventDispatchThread.java:203) at java.awt.EventDispatchThread.pumpEventsForFilter(java.desktop@17.0.4.1/EventDispatchThread.java:124) at java.awt.EventDispatchThread.pumpEventsForHierarchy(java.desktop@17.0.4.1/EventDispatchThread.java:113) at java.awt.EventDispatchThread.pumpEvents(java.desktop@17.0.4.1/EventDispatchThread.java:109) at java.awt.EventDispatchThread.pumpEvents(java.desktop@17.0.4.1/EventDispatchThread.java:101) at java.awt.EventDispatchThread.run(java.desktop@17.0.4.1/EventDispatchThread.java:90)

    Locked ownable synchronizers:

  • None

"TimerQueue" #31 daemon prio=5 os_prio=0 cpu=62.50ms elapsed=329.13s allocated=555K defined_classes=1 tid=0x0000024d238b7220 nid=0x11dbf4 runnable [0x0000006fefbff000] java.lang.Thread.State: TIMED_WAITING (parking) at jdk.internal.misc.Unsafe.park(java.base@17.0.4.1/Native Method)

  • parking to wait for <0x00000006c0e01788> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject) at java.util.concurrent.locks.LockSupport.parkNanos(java.base@17.0.4.1/LockSupport.java:252) at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(java.base@17.0.4.1/AbstractQueuedSynchronizer.java:1672) at java.util.concurrent.DelayQueue.take(java.base@17.0.4.1/DelayQueue.java:229) at javax.swing.TimerQueue.run(java.desktop@17.0.4.1/TimerQueue.java:172) at java.lang.Thread.run(java.base@17.0.4.1/Thread.java:833)

    Locked ownable synchronizers:

  • <0x00000006c0ff9cc8> (a java.util.concurrent.locks.ReentrantLock$NonfairSync)

"Cleaner-0" #36 daemon prio=6 os_prio=0 cpu=0.00ms elapsed=321.39s allocated=0B defined_classes=0 tid=0x0000024d238b8f00 nid=0x11f88c in Object.wait() [0x0000006feffff000] java.lang.Thread.State: TIMED_WAITING (on object monitor) at java.lang.Object.wait(java.base@17.0.4.1/Native Method)

  • waiting on at java.lang.ref.ReferenceQueue.remove(java.base@17.0.4.1/ReferenceQueue.java:155)
  • locked <0x00000006c1600178> (a java.lang.ref.ReferenceQueue$Lock) at jdk.internal.ref.CleanerImpl.run(java.base@17.0.4.1/CleanerImpl.java:140) at java.lang.Thread.run(java.base@17.0.4.1/Thread.java:833) at jdk.internal.misc.InnocuousThread.run(java.base@17.0.4.1/InnocuousThread.java:162)

    Locked ownable synchronizers:

  • None

"GhidraSwinglessTimer" #39 daemon prio=6 os_prio=0 cpu=0.00ms elapsed=320.76s allocated=10168B defined_classes=1 tid=0x0000024d238b8560 nid=0x11bdd8 in Object.wait() [0x0000006ff02ff000] java.lang.Thread.State: TIMED_WAITING (on object monitor) at java.lang.Object.wait(java.base@17.0.4.1/Native Method)

  • waiting on at java.util.TimerThread.mainLoop(java.base@17.0.4.1/Timer.java:563)
  • locked <0x00000006c17e27b8> (a java.util.TaskQueue) at java.util.TimerThread.run(java.base@17.0.4.1/Timer.java:516)

    Locked ownable synchronizers:

  • None

"File System Listener" #43 daemon prio=6 os_prio=0 cpu=0.00ms elapsed=320.74s allocated=32B defined_classes=0 tid=0x0000024d238b8090 nid=0x11f680 waiting on condition [0x0000006ff03fe000] java.lang.Thread.State: WAITING (parking) at jdk.internal.misc.Unsafe.park(java.base@17.0.4.1/Native Method)

  • parking to wait for <0x00000006c17e1738> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject) at java.util.concurrent.locks.LockSupport.park(java.base@17.0.4.1/LockSupport.java:341) at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(java.base@17.0.4.1/AbstractQueuedSynchronizer.java:506) at java.util.concurrent.ForkJoinPool.unmanagedBlock(java.base@17.0.4.1/ForkJoinPool.java:3463) at java.util.concurrent.ForkJoinPool.managedBlock(java.base@17.0.4.1/ForkJoinPool.java:3434) at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(java.base@17.0.4.1/AbstractQueuedSynchronizer.java:1623) at java.util.concurrent.LinkedBlockingQueue.take(java.base@17.0.4.1/LinkedBlockingQueue.java:435) at ghidra.framework.store.FileSystemEventManager$FileSystemEventProcessingThread.run(FileSystemEventManager.java:227)

    Locked ownable synchronizers:

  • None

"SwingWorker-pool-7-thread-1" #44 daemon prio=5 os_prio=0 cpu=0.00ms elapsed=320.65s allocated=21888B defined_classes=2 tid=0x0000024d25ba5000 nid=0x11d5e4 waiting on condition [0x0000006ff04fe000] java.lang.Thread.State: WAITING (parking) at jdk.internal.misc.Unsafe.park(java.base@17.0.4.1/Native Method)

  • parking to wait for <0x00000006c17e19a0> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject) at java.util.concurrent.locks.LockSupport.park(java.base@17.0.4.1/LockSupport.java:341) at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(java.base@17.0.4.1/AbstractQueuedSynchronizer.java:506) at java.util.concurrent.ForkJoinPool.unmanagedBlock(java.base@17.0.4.1/ForkJoinPool.java:3463) at java.util.concurrent.ForkJoinPool.managedBlock(java.base@17.0.4.1/ForkJoinPool.java:3434) at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(java.base@17.0.4.1/AbstractQueuedSynchronizer.java:1623) at java.util.concurrent.LinkedBlockingQueue.take(java.base@17.0.4.1/LinkedBlockingQueue.java:435) at java.util.concurrent.ThreadPoolExecutor.getTask(java.base@17.0.4.1/ThreadPoolExecutor.java:1062) at java.util.concurrent.ThreadPoolExecutor.runWorker(java.base@17.0.4.1/ThreadPoolExecutor.java:1122) at java.util.concurrent.ThreadPoolExecutor$Worker.run(java.base@17.0.4.1/ThreadPoolExecutor.java:635) at java.lang.Thread.run(java.base@17.0.4.1/Thread.java:833)

    Locked ownable synchronizers:

  • None

"SwingWorker-pool-7-thread-2" #45 daemon prio=5 os_prio=0 cpu=0.00ms elapsed=320.65s allocated=12944B defined_classes=2 tid=0x0000024d25ba37f0 nid=0x11d74c waiting on condition [0x0000006ff05fe000] java.lang.Thread.State: WAITING (parking) at jdk.internal.misc.Unsafe.park(java.base@17.0.4.1/Native Method)

  • parking to wait for <0x00000006c17e19a0> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject) at java.util.concurrent.locks.LockSupport.park(java.base@17.0.4.1/LockSupport.java:341) at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(java.base@17.0.4.1/AbstractQueuedSynchronizer.java:506) at java.util.concurrent.ForkJoinPool.unmanagedBlock(java.base@17.0.4.1/ForkJoinPool.java:3463) at java.util.concurrent.ForkJoinPool.managedBlock(java.base@17.0.4.1/ForkJoinPool.java:3434) at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(java.base@17.0.4.1/AbstractQueuedSynchronizer.java:1623) at java.util.concurrent.LinkedBlockingQueue.take(java.base@17.0.4.1/LinkedBlockingQueue.java:435) at java.util.concurrent.ThreadPoolExecutor.getTask(java.base@17.0.4.1/ThreadPoolExecutor.java:1062) at java.util.concurrent.ThreadPoolExecutor.runWorker(java.base@17.0.4.1/ThreadPoolExecutor.java:1122) at java.util.concurrent.ThreadPoolExecutor$Worker.run(java.base@17.0.4.1/ThreadPoolExecutor.java:635) at java.lang.Thread.run(java.base@17.0.4.1/Thread.java:833)

    Locked ownable synchronizers:

  • None

"FelixDispatchQueue" #52 prio=6 os_prio=0 cpu=0.00ms elapsed=307.67s allocated=17768B defined_classes=1 tid=0x0000024d25ba89c0 nid=0x11f908 in Object.wait() [0x0000006ff01ff000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(java.base@17.0.4.1/Native Method)

  • waiting on at java.lang.Object.wait(java.base@17.0.4.1/Object.java:338) at org.apache.felix.framework.EventDispatcher.run(EventDispatcher.java:1122)
  • locked <0x00000006c0d3fd50> (a java.util.ArrayList) at org.apache.felix.framework.EventDispatcher.access$000(EventDispatcher.java:54) at org.apache.felix.framework.EventDispatcher$1.run(EventDispatcher.java:102) at java.lang.Thread.run(java.base@17.0.4.1/Thread.java:833)

    Locked ownable synchronizers:

  • None

"FelixFrameworkWiring" #57 daemon prio=6 os_prio=0 cpu=0.00ms elapsed=307.10s allocated=144B defined_classes=0 tid=0x0000024d25ba6810 nid=0x11f94c in Object.wait() [0x0000006ff0dfe000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(java.base@17.0.4.1/Native Method)

  • waiting on at java.lang.Object.wait(java.base@17.0.4.1/Object.java:338) at org.apache.felix.framework.FrameworkWiringImpl.run(FrameworkWiringImpl.java:169)
  • locked <0x00000006c0d40008> (a java.util.ArrayList) at java.lang.Thread.run(java.base@17.0.4.1/Thread.java:833)

    Locked ownable synchronizers:

  • None

"FelixStartLevel" #58 daemon prio=6 os_prio=0 cpu=15.62ms elapsed=307.10s allocated=11768B defined_classes=1 tid=0x0000024d25ba7680 nid=0x11f938 in Object.wait() [0x0000006ff0eff000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(java.base@17.0.4.1/Native Method)

  • waiting on at java.lang.Object.wait(java.base@17.0.4.1/Object.java:338) at org.apache.felix.framework.FrameworkStartLevelImpl.run(FrameworkStartLevelImpl.java:283)
  • locked <0x00000006c0d420f0> (a java.util.ArrayList) at java.lang.Thread.run(java.base@17.0.4.1/Thread.java:833)

    Locked ownable synchronizers:

  • None

"GTimer" #63 daemon prio=6 os_prio=0 cpu=0.00ms elapsed=301.06s allocated=336B defined_classes=0 tid=0x0000024d238b5540 nid=0x11f9c0 in Object.wait() [0x0000006ff10ff000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(java.base@17.0.4.1/Native Method)

  • waiting on at java.lang.Object.wait(java.base@17.0.4.1/Object.java:338) at java.util.TimerThread.mainLoop(java.base@17.0.4.1/Timer.java:537)
  • locked <0x00000006c39ff938> (a java.util.TaskQueue) at java.util.TimerThread.run(java.base@17.0.4.1/Timer.java:516)

    Locked ownable synchronizers:

  • None

"Log4j2-TF-5-Scheduled-2" #90 daemon prio=5 os_prio=0 cpu=0.00ms elapsed=147.69s allocated=656B defined_classes=0 tid=0x0000024d2a978bd0 nid=0x11f7d0 waiting on condition [0x0000006fee2fe000] java.lang.Thread.State: TIMED_WAITING (parking) at jdk.internal.misc.Unsafe.park(java.base@17.0.4.1/Native Method)

  • parking to wait for <0x00000006cc838380> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject) at java.util.concurrent.locks.LockSupport.parkNanos(java.base@17.0.4.1/LockSupport.java:252) at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(java.base@17.0.4.1/AbstractQueuedSynchronizer.java:1672) at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(java.base@17.0.4.1/ScheduledThreadPoolExecutor.java:1182) at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(java.base@17.0.4.1/ScheduledThreadPoolExecutor.java:899) at java.util.concurrent.ThreadPoolExecutor.getTask(java.base@17.0.4.1/ThreadPoolExecutor.java:1062) at java.util.concurrent.ThreadPoolExecutor.runWorker(java.base@17.0.4.1/ThreadPoolExecutor.java:1122) at java.util.concurrent.ThreadPoolExecutor$Worker.run(java.base@17.0.4.1/ThreadPoolExecutor.java:635) at java.lang.Thread.run(java.base@17.0.4.1/Thread.java:833)

    Locked ownable synchronizers:

  • None

"VM Thread" os_prio=2 cpu=2062.50ms elapsed=335.21s tid=0x0000024d22265650 nid=0x11f820 runnable

"GC Thread#0" os_prio=2 cpu=16171.88ms elapsed=335.24s tid=0x0000024d7fc7e460 nid=0x11f828 runnable

"GC Thread#1" os_prio=2 cpu=16296.88ms elapsed=333.11s tid=0x0000024d232806f0 nid=0x118940 runnable

"GC Thread#2" os_prio=2 cpu=15843.75ms elapsed=333.11s tid=0x0000024d232a63e0 nid=0x11893c runnable

"GC Thread#3" os_prio=2 cpu=16046.88ms elapsed=333.11s tid=0x0000024d23331050 nid=0x118948 runnable

"G1 Main Marker" os_prio=2 cpu=1890.62ms elapsed=335.24s tid=0x0000024d7fc8f150 nid=0x11f82c runnable

"G1 Conc#0" os_prio=2 cpu=30984.38ms elapsed=335.24s tid=0x0000024d7fc91200 nid=0x11f708 runnable

"G1 Refine#0" os_prio=2 cpu=29312.50ms elapsed=335.24s tid=0x0000024d7fceda70 nid=0x11f830 runnable

"G1 Refine#1" os_prio=2 cpu=7890.62ms elapsed=320.41s tid=0x0000024d2773ff70 nid=0x11f8b8 runnable

"G1 Refine#2" os_prio=2 cpu=2468.75ms elapsed=320.41s tid=0x0000024d2530c370 nid=0x11f14c runnable

"G1 Refine#3" os_prio=2 cpu=2015.62ms elapsed=198.50s tid=0x0000024d2a8c81a0 nid=0x11ebe0 runnable

"G1 Service" os_prio=2 cpu=0.00ms elapsed=335.23s tid=0x0000024d7fcee240 nid=0x11ee3c runnable

"VM Periodic Task Thread" os_prio=2 cpu=125.00ms elapsed=335.10s tid=0x0000024d7fc14700 nid=0x116120 waiting on condition

JNI global refs: 129, weak refs: 733

I'm also taking another dump (of AWT-EventQueue-0) just in case :

"AWT-EventQueue-0" #29 prio=6 os_prio=0 cpu=240609.38ms elapsed=465.40s allocated=81531M defined_classes=5844 tid=0x0000024d238b63b0 nid=0x11dbf0 runnable [0x0000006fefafd000] java.lang.Thread.State: RUNNABLE at ghidra.program.database.data.ArrayDB.getElementLength(ArrayDB.java:178) at ghidra.program.database.data.ArrayDB.getLength(ArrayDB.java:129) at ghidra.program.database.code.DataDB.getNumComponents(DataDB.java:611) at ghidra.program.database.code.DataDB.getComponent(DataDB.java:215) at ghidra.program.util.DefinedDataIterator$DataComponentIterator.next(DefinedDataIterator.java:251) at ghidra.program.util.DefinedDataIterator.findNext(DefinedDataIterator.java:173) at ghidra.program.util.DefinedDataIterator.hasNext(DefinedDataIterator.java:147) at ghidra.app.plugin.core.strings.ViewStringsTableModel.addDataInstance(ViewStringsTableModel.java:144) at ghidra.app.plugin.core.strings.ViewStringsProvider.add(ViewStringsProvider.java:186) at ghidra.app.plugin.core.strings.ViewStringsPlugin.domainObjectChanged(ViewStringsPlugin.java:230) at ghidra.framework.data.DomainObjectChangeSupport$EventNotification.doNotify(DomainObjectChangeSupport.java:297) at ghidra.framework.data.DomainObjectChangeSupport.doSendEventsNow(DomainObjectChangeSupport.java:164) at ghidra.framework.data.DomainObjectChangeSupport.lambda$sendEventNow$3(DomainObjectChangeSupport.java:158) at ghidra.framework.data.DomainObjectChangeSupport$$Lambda$903/0x00000007c0c12728.run(Unknown Source) at ghidra.util.Swing.doRun(Swing.java:292) at ghidra.util.Swing.runNow(Swing.java:208) at ghidra.util.Swing.runNow(Swing.java:163) at ghidra.framework.data.DomainObjectChangeSupport.sendEventNow(DomainObjectChangeSupport.java:158) at ghidra.framework.data.DomainObjectChangeSupport$$Lambda$870/0x00000007c0bf1a80.timerFired(Unknown Source) at generic.timer.GhidraSwingTimer.actionPerformed(GhidraSwingTimer.java:45) at javax.swing.Timer.fireActionPerformed(java.desktop@17.0.4.1/Timer.java:311) at javax.swing.Timer$DoPostEvent.run(java.desktop@17.0.4.1/Timer.java:243) at java.awt.event.InvocationEvent.dispatch(java.desktop@17.0.4.1/InvocationEvent.java:318) at java.awt.EventQueue.dispatchEventImpl(java.desktop@17.0.4.1/EventQueue.java:771) at java.awt.EventQueue$4.run(java.desktop@17.0.4.1/EventQueue.java:722) at java.awt.EventQueue$4.run(java.desktop@17.0.4.1/EventQueue.java:716) at java.security.AccessController.executePrivileged(java.base@17.0.4.1/AccessController.java:776) at java.security.AccessController.doPrivileged(java.base@17.0.4.1/AccessController.java:399) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(java.base@17.0.4.1/ProtectionDomain.java:86) at java.awt.EventQueue.dispatchEvent(java.desktop@17.0.4.1/EventQueue.java:741) at java.awt.EventDispatchThread.pumpOneEventForFilters(java.desktop@17.0.4.1/EventDispatchThread.java:203) at java.awt.EventDispatchThread.pumpEventsForFilter(java.desktop@17.0.4.1/EventDispatchThread.java:124) at java.awt.EventDispatchThread.pumpEventsForHierarchy(java.desktop@17.0.4.1/EventDispatchThread.java:113) at java.awt.EventDispatchThread.pumpEvents(java.desktop@17.0.4.1/EventDispatchThread.java:109) at java.awt.EventDispatchThread.pumpEvents(java.desktop@17.0.4.1/EventDispatchThread.java:101) at java.awt.EventDispatchThread.run(java.desktop@17.0.4.1/EventDispatchThread.java:90)

Locked ownable synchronizers:

  • None

"AWT-EventQueue-0" #29 prio=6 os_prio=0 cpu=292953.12ms elapsed=566.18s allocated=98474M defined_classes=5844 tid=0x0000024d238b63b0 nid=0x11dbf0 runnable [0x0000006fefafd000] java.lang.Thread.State: RUNNABLE at ghidra.program.util.DefinedDataIterator.currentIt(DefinedDataIterator.java:164) at ghidra.program.util.DefinedDataIterator.findNext(DefinedDataIterator.java:172) at ghidra.program.util.DefinedDataIterator.hasNext(DefinedDataIterator.java:147) at ghidra.app.plugin.core.strings.ViewStringsTableModel.addDataInstance(ViewStringsTableModel.java:144) at ghidra.app.plugin.core.strings.ViewStringsProvider.add(ViewStringsProvider.java:186) at ghidra.app.plugin.core.strings.ViewStringsPlugin.domainObjectChanged(ViewStringsPlugin.java:230) at ghidra.framework.data.DomainObjectChangeSupport$EventNotification.doNotify(DomainObjectChangeSupport.java:297) at ghidra.framework.data.DomainObjectChangeSupport.doSendEventsNow(DomainObjectChangeSupport.java:164) at ghidra.framework.data.DomainObjectChangeSupport.lambda$sendEventNow$3(DomainObjectChangeSupport.java:158) at ghidra.framework.data.DomainObjectChangeSupport$$Lambda$903/0x00000007c0c12728.run(Unknown Source) at ghidra.util.Swing.doRun(Swing.java:292) at ghidra.util.Swing.runNow(Swing.java:208) at ghidra.util.Swing.runNow(Swing.java:163) at ghidra.framework.data.DomainObjectChangeSupport.sendEventNow(DomainObjectChangeSupport.java:158) at ghidra.framework.data.DomainObjectChangeSupport$$Lambda$870/0x00000007c0bf1a80.timerFired(Unknown Source) at generic.timer.GhidraSwingTimer.actionPerformed(GhidraSwingTimer.java:45) at javax.swing.Timer.fireActionPerformed(java.desktop@17.0.4.1/Timer.java:311) at javax.swing.Timer$DoPostEvent.run(java.desktop@17.0.4.1/Timer.java:243) at java.awt.event.InvocationEvent.dispatch(java.desktop@17.0.4.1/InvocationEvent.java:318) at java.awt.EventQueue.dispatchEventImpl(java.desktop@17.0.4.1/EventQueue.java:771) at java.awt.EventQueue$4.run(java.desktop@17.0.4.1/EventQueue.java:722) at java.awt.EventQueue$4.run(java.desktop@17.0.4.1/EventQueue.java:716) at java.security.AccessController.executePrivileged(java.base@17.0.4.1/AccessController.java:776) at java.security.AccessController.doPrivileged(java.base@17.0.4.1/AccessController.java:399) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(java.base@17.0.4.1/ProtectionDomain.java:86) at java.awt.EventQueue.dispatchEvent(java.desktop@17.0.4.1/EventQueue.java:741) at java.awt.EventDispatchThread.pumpOneEventForFilters(java.desktop@17.0.4.1/EventDispatchThread.java:203) at java.awt.EventDispatchThread.pumpEventsForFilter(java.desktop@17.0.4.1/EventDispatchThread.java:124) at java.awt.EventDispatchThread.pumpEventsForHierarchy(java.desktop@17.0.4.1/EventDispatchThread.java:113) at java.awt.EventDispatchThread.pumpEvents(java.desktop@17.0.4.1/EventDispatchThread.java:109) at java.awt.EventDispatchThread.pumpEvents(java.desktop@17.0.4.1/EventDispatchThread.java:101) at java.awt.EventDispatchThread.run(java.desktop@17.0.4.1/EventDispatchThread.java:90)

Locked ownable synchronizers:

  • None
dev747368 commented 1 year ago

Could you try again, but before starting the analysis, close the defined strings component, and anything else that isn't absolutely necessary (ex. symbols tree, program tree, anything showing live data that auto-refreshes).

dragonmacher commented 1 year ago

As @dev747368 mentioned, the various providers performing work during analysis will slow Ghidra. In this case specifically, it is the Defined Strings view that is effectively locking the UI.

wichiandyx commented 1 year ago

wow thanks a lot @dev747368 @dragonmacher , it works like charm! <3 I never know the Defined String has significant impact on loading the PDB, i should take note of that from now on :D