gpt4 book ai didi

c - 我尝试理解 [c 代码 -> 汇编] 代码

转载 作者:行者123 更新时间:2023-11-30 19:41:41 30 4
gpt4 key购买 nike

我尝试理解[c代码 -> 汇编]代码

void node::Check( data & _data1, vector<data2*>& _data2)
{

-> push ebp
-> mov ebp,esp
-> push ebx

if (TryToCheck(_data1.a, _data1.b))

-> mov ebx,dword ptr [_data1]
  1. 我不确定这一行的作用这行的含义是什么,

    push esi
    mov esi,ecx
  2. 据我所知,
  3. ecx 是一个计数值。为什么要将ecx的值保存在esi中?

    mov eax,dword ptr [esi+50h]
  4. 这个值 50h 是什么意思?

    mov eax,dword ptr [eax+4]
    lea edx,[ebx+40h]
    lea ecx,[esi+50h]
    push edx
    lea edx,[ebx+50h]
    push edx
    call eax
    test al,al
    je node::Check+7Fh

最佳答案

push ebp
mov ebp,esp

这会保存调用者的堆栈帧指针 (push ebp) 并设置您的堆栈帧指针 (mov ebp,esp)。

push ebx 

这会将 ebx 保存在堆栈上。稍后,在返回之前,您将看到一个 pop ebx

mov ebx,dword ptr [_data1]

这会将位置 _data1 的内容移至 ebx 寄存器中。调试器会向您显示一个符号名称;如果你仔细观察,你会看到move ebx,dword ptr [ebp+12]。这里使用 ebp 中的堆栈帧指针访问调用者的参数。

push esi
mov esi,ecx

这会保存 esi,然后将 ecx 的值移至 esi

mov eax,dword ptr [esi+50h]

这会将 esi+50h 处的内存位置的值移动到 eax 中。

有时您不必太担心编译器生成的汇编程序。它可能不是最优的,也可能是优化过度导致您无法识别原始语句。

关于c - 我尝试理解 [c 代码 -> 汇编] 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33254393/

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