- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
thread start
是从某个角度定义的,例如,在Windows中,它始终是
ntdll.RtlUserThreadStart+21
(用户),但在程序库级别,它可以是任何函数。但是在创建线程
thread start
(系统)之前不会调用
ntdll.NtCreateThreadEx+14
。
thread entry
是作为
thread create
函数的参数给出的(库,即导出的或私有(private)的)函数。
4200
00000076EBDFF9A8 00007FFEC900A34E 00007FFECB4EC034 A0 ntdll.NtWaitForSingleObject+14 System
00000076EBDFFA48 00007FF7987B48A1 00007FFEC900A34E 30 kernelbase.WaitForSingleObjectEx+8E User
00000076EBDFFA78 00007FF7988961A0 00007FF7987B48A1 30 mylibrarydll0.00007FF7987B48A1 User
00000076EBDFFAA8 00007FF7987B13DF 00007FF7988961A0 30 mylibrarydll0.00007FF7988961A0 User
00000076EBDFFAD8 00007FF798B4A175 00007FF7987B13DF 30 mylibrarydll0.00007FF7987B13DF User
00000076EBDFFB08 00007FFECA637034 00007FF798B4A175 30 mylibrarydll0.sub_7FF798B4A0B4+C1 System
00000076EBDFFB38 00007FFECB49D0D1 00007FFECA637034 80 kernel32.BaseThreadInitThunk+14 System
00000076EBDFFBB8 0000000000000000 00007FFECB49D0D1 ntdll.RtlUserThreadStart+21 User
2736
00000076EB5FF648 00007FFECB4623D7 00007FFECB4EFA04 300 ntdll.NtWaitForWorkViaWorkerFactory+14 System
00000076EB5FF948 00007FFECA637034 00007FFECB4623D7 30 ntdll.TppWorkerThread+2F7 System
00000076EB5FF978 00007FFECB49D0D1 00007FFECA637034 80 kernel32.BaseThreadInitThunk+14 System
00000076EB5FF9F8 0000000000000000 00007FFECB49D0D1 ntdll.RtlUserThreadStart+21 User
2468
00000076EBBFFB78 00007FFEC900A34E 00007FFECB4EC034 A0 ntdll.NtWaitForSingleObject+14 System
00000076EBBFFC18 00007FF7987B48A1 00007FFEC900A34E 30 kernelbase.WaitForSingleObjectEx+8E User
00000076EBBFFC48 00007FF7988961A0 00007FF7987B48A1 30 mylibrarydll0.00007FF7987B48A1 User
00000076EBBFFC78 00007FF7987B13DF 00007FF7988961A0 30 mylibrarydll0.00007FF7988961A0 User
00000076EBBFFCA8 00007FF798B4A175 00007FF7987B13DF 30 mylibrarydll0.00007FF7987B13DF User
00000076EBBFFCD8 00007FFECA637034 00007FF798B4A175 30 mylibrarydll0.sub_7FF798B4A0B4+C1 System
00000076EBBFFD08 00007FFECB49D0D1 00007FFECA637034 80 kernel32.BaseThreadInitThunk+14 System
00000076EBBFFD88 0000000000000000 00007FFECB49D0D1 ntdll.RtlUserThreadStart+21 User
3784
00000076EB6FFB88 00007FFECB4623D7 00007FFECB4EFA04 300 ntdll.NtWaitForWorkViaWorkerFactory+14 System
00000076EB6FFE88 00007FFECA637034 00007FFECB4623D7 30 ntdll.TppWorkerThread+2F7 System
00000076EB6FFEB8 00007FFECB49D0D1 00007FFECA637034 80 kernel32.BaseThreadInitThunk+14 System
00000076EB6FFF38 0000000000000000 00007FFECB49D0D1 ntdll.RtlUserThreadStart+21 User
1928
00000076EB7FFA48 00007FFEC900A34E 00007FFECB4EC034 A0 ntdll.NtWaitForSingleObject+14 System
00000076EB7FFAE8 00007FF7987B48A1 00007FFEC900A34E 30 kernelbase.WaitForSingleObjectEx+8E User
00000076EB7FFB18 00007FF7988961A0 00007FF7987B48A1 30 mylibrarydll0.00007FF7987B48A1 User
00000076EB7FFB48 00007FF7987B13DF 00007FF7988961A0 30 mylibrarydll0.00007FF7988961A0 User
00000076EB7FFB78 00007FF798B4A175 00007FF7987B13DF 30 mylibrarydll0.00007FF7987B13DF User
00000076EB7FFBA8 00007FFECA637034 00007FF798B4A175 30 mylibrarydll0.sub_7FF798B4A0B4+C1 System
00000076EB7FFBD8 00007FFECB49D0D1 00007FFECA637034 80 kernel32.BaseThreadInitThunk+14 System
00000076EB7FFC58 0000000000000000 00007FFECB49D0D1 ntdll.RtlUserThreadStart+21 User
2276
00000076EB8FF7C8 00007FFEC900A34E 00007FFECB4EC034 A0 ntdll.NtWaitForSingleObject+14 System
00000076EB8FF868 00007FF7987B48A1 00007FFEC900A34E 30 kernelbase.WaitForSingleObjectEx+8E User
00000076EB8FF898 00007FF7988961A0 00007FF7987B48A1 30 mylibrarydll0.00007FF7987B48A1 User
00000076EB8FF8C8 00007FF7987B13DF 00007FF7988961A0 30 mylibrarydll0.00007FF7988961A0 User
00000076EB8FF8F8 00007FF798B4A175 00007FF7987B13DF 30 mylibrarydll0.00007FF7987B13DF User
00000076EB8FF928 00007FFECA637034 00007FF798B4A175 30 mylibrarydll0.sub_7FF798B4A0B4+C1 System
00000076EB8FF958 00007FFECB49D0D1 00007FFECA637034 80 kernel32.BaseThreadInitThunk+14 System
00000076EB8FF9D8 0000000000000000 00007FFECB49D0D1 ntdll.RtlUserThreadStart+21 User
12168
00000076EB9FF6E8 00007FFECB4623D7 00007FFECB4EFA04 300 ntdll.NtWaitForWorkViaWorkerFactory+14 System
00000076EB9FF9E8 00007FFECA637034 00007FFECB4623D7 30 ntdll.TppWorkerThread+2F7 System
00000076EB9FFA18 00007FFECB49D0D1 00007FFECA637034 80 kernel32.BaseThreadInitThunk+14 System
00000076EB9FFA98 0000000000000000 00007FFECB49D0D1 ntdll.RtlUserThreadStart+21 User
2428
00000076EBAFF5D8 00007FFECB4623D7 00007FFECB4EFA04 300 ntdll.NtWaitForWorkViaWorkerFactory+14 System
00000076EBAFF8D8 00007FFECA637034 00007FFECB4623D7 30 ntdll.TppWorkerThread+2F7 System
00000076EBAFF908 00007FFECB49D0D1 00007FFECA637034 80 kernel32.BaseThreadInitThunk+14 System
00000076EBAFF988 0000000000000000 00007FFECB49D0D1 ntdll.RtlUserThreadStart+21 User
最佳答案
Windows向调试器发送了一组特定的事件,您可以在WaitForDebugEvent文档中找到它们。
这些事件之一是CREATE_THREAD_DEBUG_INFO
,,在Windows创建但尚未启动线程时发送。
在Windows中,进程和线程的创建在内核中进行,但是它们的最终初始化步骤在用户空间中进行(除非它是一个picoprocess,我们在此不做介绍)。 DLL ntdll.dll
在创建后立即映射到线程中,并且线程上下文的RIP
设置为指向该DLL的功能之一。
该函数将执行必要的初始化,然后跳转到CreateThread
或类似名称中给出的地址。此函数有点像线程的包装器。
可以肯定的是,线程初始化会在初始化函数的第一条指令即将执行时发生(就像Windows在此设置断点一样)。
相反,线程条目只是分配给线程创建API的地址。这很重要,因为它是调用者要执行的实际代码。实际上,出于调试或RE的目的,您几乎可以(如果不是始终如此)忽略线程启动事件。
让我们做一个例子。考虑这个简单的64位程序。
BITS 64
EXTERN CreateThread
GLOBAL _start
SECTION .text
_start:
and rsp, -16
push 0
push 0
sub rsp, 20h
xor r9, r9
lea r8, [REL _thread1]
xor edx, edx
xor ecx, ecx
call CreateThread
.loop:
TIMES 1000 pause
jmp .loop
_thread1:
TIMES 1000 pause
jmp _thread1
它所做的只是创建一个线程,该线程指向在循环中执行的
pause
指令雪橇。主线程还将执行类似但不同的循环。
RIP
更改,但仍不在Windows API中。只要没有错误,循环中的任何指令都可以。我选择了
pause
,因为:)
RtlUserThreadStart
的开头停止。对于我的Windows版本(Windows 7之类的),情况总是如此。鉴于此答案开头的介绍,这是有道理的。
rcx
中,这意味着它是
RtlUserThreadStart
的第一个参数。
RIP
仍然指向两个循环中的某个位置(为了简化此测试而存在)。
Get/SetThreadContext
的调用来更改线程的
RIP
,则
RtlUserStartThread
将永远不会执行(IDK该函数的确切作用,但是线程可以不执行此操作),而
则线程开始事件永远不会触发。
RIP
。
TF
(并在捕获到相关异常后立即将其删除)来生成线程启动事件。
RIP
(也很容易获得,因为这种线程被创建为暂停状态)中放置了一个断点。知道有些东西可疑)。
RIP
上的代码尚不清楚(例如仍然被混淆),请使用硬件断点。
关于c - 线程入口和线程启动之间的确切区别是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65926429/
通常入口重写目标的工作原理如下: nginx.ingress.kubernetes.io/rewrite-target: / 这将重写服务名称的目标,因为它们在根目录中。所以如果我有这个: apiVe
我正在使用 Helm 部署的 GKE (1.8.5-gke.0) 上运行 traefik 入口 Controller 。我观察到的是请求经常得到 404 响应。 看起来 traefik 会不断重新加载
是否可以在没有负载均衡器的情况下在 Kubernetes 中使用 Ingress Controller 功能(在 Digital Ocean 中)。 有没有其他机制可以让域名映射到Kubernetes
我使用 KOPS 和 nginx-ingress 在 AWS 上部署了 Kubernetes。 为了评估多个云(并削减成本),我想在 GKE 上进行部署。一切正常,除了该死的 Ingress。 (这是
要求:想要使用带有 HTTPS 的入口部署 Minio 和另一个后端服务(不用于生产目的) 我一直在尝试创建一个入口以从 GKE 中的 Kubernetes 集群外部访问两个服务。这些是我尝试过的尝试
我对使用漏斗可视化功能的谷歌分析有点坚持。 输入漏斗可视化时,它会显示带有数字的“(入口)”。 这代表什么? 最佳答案 这表示在漏斗中第一步所代表的特定页面或一组页面上进入您网站的人数。 关于goog
我尝试在我的 kubernetes 集群上配置入口。我关注了documentation安装入口 Controller 并运行以下命令 kubectl apply -f https://raw.gith
我无法连接到使用 nginx 入口运行的应用程序(Docker Desktop win 10)。 nginx-ingress Controller pod 正在运行,应用程序运行良好,并且我创建了一个
我试图弄清楚如何使用具有某些特定规则的 nginx 代理缓存。例如,当我托管 Ghost 或 Wordpress 时,我不想缓存管理部分。使用服务器片段,我尝试了很多不同的组合,但在管理部分的缓存仍然
我正在尝试将AKS入口的IP列入白名单。我目前正在使用未随Helm一起安装的ingress-nginx。 强制性kubernetes资源可以在here中找到 服务启动为: spec: extern
我的机构有防火墙设置,阻止了大部分外部端口,目前,我有内部 Linux 虚拟机,例如, http://abc.xyz:5555 (此链接只能在内网访问),并且管理员设置了Netscaler,以便将内部
我正在尝试根据用户代理代理_传递流量。试图为它使用服务器代码段/配置代码段,但入口不允许我。 (禁止在 server-snippet 中使用 proxy_pass 并在 configuration-s
我已经使用 nginx-stable 安装了 nginx helm 图表和配置的入口规则如下。虽然它仅适用于根路径,如下所示, /user/login - working /user/register
使用 KOPS 在 AWS 上部署 k8s。 我已经创建了 nginx 入口 https://github.com/kubernetes/ingress-nginx nginx-ingress-con
在我的聊天应用程序中,当一个用户将另一个人添加到他/她的联系人列表中时,服务器条目显示 BOTH 订阅,但在我的应用程序中,代码根据 TO/FROM 订阅工作(就像在接受 friend 请求之前一样)
我在 Python 中有一个实用程序模块,它需要知道正在使用它的应用程序的名称。实际上,这意味着被调用以启动应用程序的顶级 python 脚本的名称(即,其中__name=="__main__"为真)
在这种情况下,我将如何实现“OnButtonClick”以便在按下按钮时打印用户输入“e1”? from Tkinter import * class App: def __init__
我使用以下命令在本地生成 key 。 openssl genrsa -out testsvc.testns.ing.lb.xyz.io.key.pem 2048 并使用以下命令生成 CSR(证书签名请
我正在运行 mint 17.2 kde。 我通过在 ~/Downloads/中运行 idea.sh 安装了 intellij CE 然后我将 intellij 移动到/usr/lib/。现在,当我尝试
我无法让 Controller 工作。尝试了很多次,我仍然得到 Error: ImagePullBackOff。 有没有我可以尝试的替代方案或者它失败的原因? kubectl apply -f
我是一名优秀的程序员,十分优秀!