gpt4 book ai didi

python - 'bool' 对象不可迭代,Gray Hat Python 示例

转载 作者:太空宇宙 更新时间:2023-11-04 10:41:00 27 4
gpt4 key购买 nike

import my_debugger
from my_debugger_defines import *

debugger = my_debugger.debugger()

pid = raw_input("Enter the PID of the process to attach to: ")

debugger.attach(int(pid))

list = debugger.enumerate_threads()

for thread in list:

thread_context = debugger.get_thread_context(thread)

print "[*] Dumping registers for thread ID: 0x%08x" % thread
print "[**] EIP: 0x%08x" % thread_context.Eip
print "[**] ESP: 0x%08x" % thread_context.Esp
print "[**] EBP: 0x%08x" % thread_context.Ebp
print "[**] EAX: 0x%08x" % thread_context.Eax
print "[**] EBX: 0x%08x" % thread_context.Ebx
print "[**] ECX: 0x%08x" % thread_context.Ecx
print "[**] EDX: 0x%08x" % thread_context.Edx
print "[*] END DUMP"

debugger.detach()

以上是我的测试程序,它产生“bool”对象不可迭代错误并引用第 12 行:

for thread in list:

我对可迭代对象做了一些研究,基本上发现它必须能够用不同的值来重申自己(我的编程知识很薄弱,如果我错了请指正)。我不知道如何修复代码以使其正常工作。我做了很多谷歌搜索,但我没有足够的经验来引用类似的问题并将其应用于我自己的代码。这是直接从书中摘录的代码,所以我想知道我是犯了一个简单的错误还是更复杂。

这里还有枚举线程的定义函数

def enumerate_threads(self):

thread_entry = THREADENTRY32()
thread_list = []
snapshot = kernel32.CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, self.pid)

if snapshot is not None:
thread_entry.dwSize = sizeof(thread_entry)
success = kernel32.Thread32First(snapshot, byref(thread_entry))

while success:

if thread_entry.th32OwnerProcessID == self.pid:
thread_list.append(thread_entry.th32ThreadID)
success = kernel32.Thread32Next(snapshot, byref(thread_entry))

kernel32.CloseHandle(snapshot)
return thread_list

else:
return False

如果您需要更多信息,请告诉我。我感谢任何帮助。提前致谢。

最佳答案

thread_entry.th32OwnerProcessID == self.pid 不是 True 时,您的方法返回 False。也许您想返回一个空列表?

else:
return []

无论哪种方式,您的函数都返回而不迭代,因为您总是while 循环return

如果 successFalse,您的代码也将返回 None,这也不是可迭代的。也许您想使用:

while success:
if thread_entry.th32OwnerProcessID == self.pid:
thread_list.append(thread_entry.th32ThreadID)

success = kernel32.Thread32Next(snapshot, byref(thread_entry))

if snapshot is not None:
kernel32.CloseHandle(snapshot)

return thread_list

请注意,在您的代码中使用名称 list 很少是一个好主意;已经有一个该名称的内置类型,您的代码现在正在隐藏它。

关于python - 'bool' 对象不可迭代,Gray Hat Python 示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20617895/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com