我使用WinDbg分析Adobe Acrobat Reader,AcroRd32.exe
。我想看看AcroRd32.exe
加载了哪些模块(与AcroRd.exe
在同一目录中的.dll模块)。
我使用WinDbg监控打开PDF文件,然后使用lm
命令显示已加载的模块。但是,没有与AcroRd32.exe
具有相同目录的模块(.DLL)。
这是否意味着AcroRd32.exe
没有使用这些DLL?为了验证我的假设,我删除了与AcroRd32.exe
在同一目录中的所有DLL文件。然后AcroRd32.exe
无法正常启动。这意味着AcroRd32.exe
需要这些DLL。但是为什么WinDbg的lm
命令没有显示这些DLL模块?
答案 0 :(得分:1)
Acrobat Reader会启动另一个实例。您需要调试第二个实例以查看正在加载的模块:
import time
from multiprocessing import Pool
def do_work(msg):
# do some work
if __name__ == '__main__':
consumer = KafkaConsumer(
group_id=worker_config.kafka_group_id,
bootstrap_servers=kafka_url,
auto_offset_reset=worker_config.kafka_reset,
enable_auto_commit=True)
consumer.subscribe(topics=worker_config.kafka_topics)
for message in consumer:
logging.info('topic=%s, partition=%d, msg=%s' % (message.topic, message.partition, msg))
pool.apply_async(do_work, (message,))
process_count = number_of_active_process_of_pool
logging.info("number_of_active_process_number is %d", process_count)
pool.close()
pool.join()
此时,第二个实例将开始。
ntdll!LdrpDoDebuggerBreak+0x2b:
77e9db9b cc int 3
0:000> .childdbg 1
Processes created by the current process will be debugged
0:000> sxe cpr
0:000> g
[...]
Executable search path is:
ModLoad: 00c20000 00e45000 AcroRd32.exe
如果在加载Acrobat Reader时中断,您将看到:
1:010> g
ntdll!LdrpDoDebuggerBreak+0x2b:
77e9db9b cc int 3
1:010> g
第一个实例没有从Adobe Acrobat目录加载的DLL,但第二个实例没有。