吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 500|回复: 7
收起左侧

[经验求助] Nmake 的makefile里,生成目标的命令行里有冒号,哪个冒号是啥意思呢?

[复制链接]
durongze 发表于 2024-9-24 22:14
25吾爱币
asm\warnings.c: asm\warnings.c.time
        @: Side effect

include\warnings.h.time: asm\warnings.pl asm\warnings.time
        $(RUNPERL) $(srcdir)\asm\warnings.pl h include\warnings.h $(srcdir)
        : > include\warnings.h.time

include\warnings.h: include\warnings.h.time
        @: Side effect
---------------------------------------------------
命令行部分里的冒号是啥意思呢?
特别强调一下,我不是问目标和依赖之间的冒号,我是问命令行部分的冒号。比如上面的 @: Side effect  和 : > include\warnings.h.time

最佳答案

查看完整内容

问了下 AI 顺手回复的,不用采纳,希望有用,希望有专业的人给你解答

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

Cristy 发表于 2024-9-24 22:14
问了下 AI 顺手回复的,不用采纳,希望有用,希望有专业的人给你解答

 楼主| durongze 发表于 2024-9-25 06:09
Cristy 发表于 2024-9-24 22:53
问了下 AI 顺手回复的,不用采纳,希望有用,希望有专业的人给你解答

你问的哪个ai呐?我问了百度的,百度的每次答的都是依赖关系的冒号,不是命令行的冒号。你这个太强了啊。
 楼主| durongze 发表于 2024-9-25 06:24
Cristy 发表于 2024-9-24 22:53
问了下 AI 顺手回复的,不用采纳,希望有用,希望有专业的人给你解答

你再帮我回答一下这个问题呗?  答案是第7段代码。 我找到答案了,但是自己不能采纳自己。你只需要答一下就可以领积分了。
https://www.52pojie.cn/thread-1960789-1-1.html
Cristy 发表于 2024-9-25 13:34
durongze 发表于 2024-9-25 06:24
你再帮我回答一下这个问题呗?  答案是第7段代码。 我找到答案了,但是自己不能采纳自己。你只需要答一下 ...

用的kimi免费的,但是一天好像有多少额度,搞两个手机注册换着用自己用就够了。或者用国外的gpt
poe啥的  感觉更智能一点,因为网络原因,国内的方便一些

如果可以,我建议您还是等更专业的人来解答吧,我这样拿AI答案被采纳,总感觉影响不太好。



这是您之前帖子原封原样复制问的答案:

要确定哪个函数是计算检验码的,我们需要寻找与校验码生成相关的特征,比如:

1. 循环处理数据块。
2. 累加或异或数据块的内容。
3. 将计算结果与预期值比较。

从你提供的汇编代码片段来看,第2段代码看起来最有可能是计算检验码的函数。以下是一些关键点:

- `mov ebx, [ecx+58990h]` 加载数据。
- `add ebx, esi` 将数据与偏移量相加。
- `shr ebx, 10h` 右移操作。
- `and ebx, 0FFh` 与操作,提取低8位。
- `push edx` 将结果压入栈中。
- `call ?Format@CString@@QAAXPBDZZ` 格式化字符串,可能是为了输出检验码。
- `sub dl, bl` 减法操作,可能是检验码的比较。

这段代码中,`ebx` 寄存器被用来计算和处理数据,最终的结果被推送到栈上,并且有格式化字符串的操作,这通常用于输出或显示计算结果。此外,`sub dl, bl` 指令可能是在比较计算出的检验码与某个预期值。

为了更准确地确定,你可能需要检查调用这个函数的上下文,以及这个函数如何使用计算出的结果。如果这个函数的输出被用于验证或比较操作,那么它很可能就是计算检验码的函数。


这是我加了个题:[backcolor=var(--msh-chat-list-user-bg)]请详细解释每一段的代码



好的,我将为你详细解释每段代码的作用:

1. 代码段

lea     ecx, [esp+310h+var_2F4] ; this
call    ??0CString@@QAE@XZ ; CString::CString(void)
lea     ecx, [esp+310h+var_2F8] ; this
mov     byte ptr [esp+310h+var_4], 7
call    ??0CString@@QAE@XZ ; CString::CString(void)
test    edi, edi
mov     byte ptr [esp+310h+var_4], 8
mov     ebp, 1
mov     dword ptr [esp+310h+var_2FC], 0
jbe     loc_450287
  • lea ecx, [esp+310h+var_2F4]:将栈指针esp加上偏移量310h+var_2F4的地址加载到ecx寄存器,准备创建CString对象。
  • call ??0CString@@QAE@XZ:调用CString的构造函数,创建一个空的CString对象。
  • lea ecx, [esp+310h+var_2F8]:同样,为另一个CString对象准备栈空间。
  • mov byte ptr [esp+310h+var_4], 7:将立即数7写入栈内存。
  • call ??0CString@@QAE@XZ:再次调用CString的构造函数。
  • test edi, edi:测试edi寄存器的值,如果edi为0,则设置零标志。
  • mov byte ptr [esp+310h+var_4], 8:将立即数8写入栈内存。
  • mov ebp, 1:将立即数1移动到ebp寄存器。
  • mov dword ptr [esp+310h+var_2FC], 0:将立即数0写入栈内存。
  • jbe loc_450287:如果前面的test edi, edi指令设置了零标志(即edi为0),则跳转到标签loc_450287

2. 代码段

push    offset a0200000400 ; ":0200000400"
lea     ecx, [esp+314h+var_2F8]
call    ??4CString@@QAEABV0@PBD@Z ; CString::operator=(char const *)
mov     ecx, dword_55990C
mov     esi, dword ptr [esp+310h+var_2FC]
lea     eax, [esp+310h+var_2F4]
mov     ebx, [ecx+58990h]
add     ebx, esi
shr     ebx, 10h
and     ebx, 0FFh
mov     edx, ebx
and     edx, 0FFh
push    edx
push    offset a02x    ; "%02X"
push    eax            ; this
call    ?Format@CString@@QAAXPBDZZ ; CString::Format(char const *,...)
add     esp, 0Ch
lea     ecx, [esp+310h+var_2F4]
push    ecx
lea     ecx, [esp+314h+var_2F8]
call    ??YCString@@QAEABV0@ABV0@@Z ; CString::operator+=(CString const &)
mov     dl, 0FAh
lea     eax, [esp+310h+var_2F4]
sub     dl, bl
and     edx, 0FFh
push    edx
push    offset a02x_2  ; "%02X\r\n"
push    eax            ; this
call    ?Format@CString@@QAAXPBDZZ ; CString::Format(char const *,...)
add     esp, 0Ch
lea     ecx, [esp+310h+var_2F4]
push    ecx
lea     ecx, [esp+314h+var_2F8]
call    ??YCString@@QAEABV0@ABV0@@Z ; CString::operator+=(CString const &)
mov     eax, [esp+310h+var_2F8]
mov     ecx, [eax-8]
push    ecx            ; unsigned int
push    eax            ; void *
lea     ecx, [esp+318h+var_2E4] ; this
call    ?Write@CFile@@UAEXPBXI@Z ; CFile::Write(void const *,uint)
  • push offset a0200000400:将字符串":0200000400"的地址压入栈。
  • lea ecx, [esp+314h+var_2F8]:准备CString对象的地址。
  • call ??4CString@@QAEABV0@PBD@Z:调用CString的赋值操作符,将字符串赋值给CString对象。
  • mov ecx, dword_55990C:加载一个全局变量的地址。
  • mov esi, dword ptr [esp+310h+var_2FC]:从栈中加载一个值到esi
  • lea eax, [esp+310h+var_2F4]:准备CString对象的地址。
  • mov ebx, [ecx+58990h]:从全局变量的偏移地址加载数据到ebx
  • add ebx, esi:将ebxesi相加。
  • shr ebx, 10h:将ebx右移16位。
  • and ebx, 0FFh:与操作,提取低8位。
  • mov edx, ebx:将ebx的值复制到edx
  • and edx, 0FFh:与操作,提取低8位。
  • push edx:将结果压入栈。
  • push offset a02x:将格式化字符串"%02X"的地址压入栈。
  • push eax:将CString对象的地址压入栈。
  • call ?Format@CString@@QAAXPBDZZ:调用Format函数,格式化字符串。
  • add esp, 0Ch:清理栈空间。
  • lea ecx, [esp+310h+var_2F4]:准备CString对象的地址。
  • push ecx:将CString对象的地址压入栈。
  • lea ecx, [esp+314h+var_2F8]:准备另一个CString对象的地址。
  • call ??YCString@@QAEABV0@ABV0@@Z:调用CString+=操作符,将格式化后的字符串追加到CString对象。
  • mov dl, 0FAh:将立即数0xFA加载到dl
  • sub dl, bl:从dl中减去bl的值。
  • and edx, 0FFh:与操作,提取低8位。
  • push edx:将结果压入栈。
  • push offset a02x_2:将格式化字符串"%02X\r\n"的地址压入栈。
  • push eax:将CString对象的地址压入栈。
  • call ?Format@CString@@QAAXPBDZZ:调用Format函数,格式化字符串。
  • add esp, 0Ch:清理栈空间。
  • lea ecx, [esp+310h+var_2F4]:准备CString对象的地址。
  • push ecx:将CString对象的地址压入栈。
  • lea ecx, [esp+314h+var_2F8]:准备另一个CString对象的地址。
  • call ??YCString@@QAEABV0@ABV0@@Z:调用CString+=操作符,将格式化后的字符串追加到CString对象。
  • mov eax, [esp+310h+var_2F8]:从栈中加载一个值到eax
  • mov ecx, [eax-8]:从eax指向的地址向前偏移8字节加载数据到ecx
  • push ecx:将结果压入栈。
  • push eax:将eax的值压入栈。
  • lea ecx, [esp+318h+var_2E4]:准备CFile对象的地址。
  • call ?Write@CFile@@UAEXPBXI@Z:调用CFile::Write函数,将数据写入文件。

3. 代码段

loc_450143:
push    offset asc_528180 ; ":"
lea     ecx, [esp+314h+var_2F8]
call    ??4CString@@QAEABV0@PBD@Z ; CString::operator=(char const *)
mov     esi, dword ptr [esp+310h+var_2FC]
mov     eax, edi
sub     eax, esi
mov     [esp+310h+var_300], 10h
cmp     eax, 10h
ja      short loc_45016A
  • push offset asc_528180:将字符串":"的地址压入栈。
  • lea ecx, [esp+314h+var_2F8]:准备CString对象的地址。
  • call ??4CString@@QAEABV0@PBD@Z:调用CString的赋值操作符,将字符串赋值给CString对象。
  • mov esi, dword ptr [esp+310h+var_2FC]:从栈中加载一个值到esi
  • mov eax, edi:将edi的值复制到eax
  • sub eax, esi:从eax中减去esi的值。
  • mov [esp+310h+var_300], 10h:将立即数0x10写入栈内存。
  • cmp eax, 10h:比较eax和立即数0x10
  • ja short loc_45016A:如果eax大于0x10,则跳转到loc_45016A

4. 代码段

loc_45016A:
mov     edx, [esp+310h+var_300]
lea     eax, [esp+310h+var_2F4]
push    edx
push    offset a02x    ; "%02X"
push    eax            ; this
call    ?Format@CString@@QAAXPBDZZ ; CString::Format(char const *,...)
add     esp, 0Ch
lea     ecx, [esp+310h+var_2F4]
push    ecx
lea     ecx, [esp+314h+var_2F8]
call    ??YCString@@QAEABV0@ABV0@@Z ; CString::operator+=(CString const &)
and     esi, 0FFFFh
lea     edx, [esp+310h+var_2F4]
push    esi
push    offset a04x    ; "%04X"
push    edx            ; this
call    ?Format@CString@@QAAXPBDZZ ; CString::Format(char const *,...)
add     esp, 0Ch
lea     eax, [esp+310h+var_2F4]
lea     ecx, [esp+310h+var_2F0]
push    offset a00     ; "00"
push    eax
push    ecx
call    ??H@YG?AVCString@@ABV0@PBD@Z ; operator+(CString const &,char const *)
push    eax
lea     ecx, [esp+314h+var_2F8]
mov     byte ptr [esp+314h+var_4], 9
call    ??YCString@@QAEABV0@ABV0@@Z ; CString::operator+=(CString const &)
lea     ecx, [esp+310h+var_2F0] ; this
mov     byte ptr [esp+310h+var_4], 8
call    ??1CString@@QAE@XZ ; CString::~CString(void)
mov     eax, dword ptr [esp+310h+var_2FC]
xor     ebx, ebx
mov     bl, ah
add     bl, al
mov     al, byte ptr [esp+310h+var_300]
add     bl, al
  • mov edx, [esp+310h+var_300]:从栈中加载一个值到edx
  • lea eax, [esp+310h+var_2F4]:准备CString对象的地址。
  • push edx:将edx的值压入栈。
  • push offset a02x:将格式化字符串"%02X"的地址压入栈。
  • push eax:将CString对象的地址压入栈。
  • call ?Format@CString@@QAAXPBDZZ:调用Format函数,格式化字符串。
  • add esp, 0Ch:清理栈空间。
  • lea ecx, [esp+310h+var_2F4]:准备CString对象的地址。
  • push ecx:将CString对象的地址压入栈。
  • lea ecx, [esp+314h+var_2F8]:准备另一个CString对象的地址。
  • call ??YCString@@QAEABV0@ABV0@@Z:调用CString+=操作符,将格式化后的字符串追加到CString对象。
  • and esi, 0FFFFh:将esi0xFFFF进行与操作。
  • lea edx, [esp+310h+var_2F4]:准备CString对象的地址。
  • push esi:将esi的值压入栈。
  • push offset a04x:将格式化字符串"%04X"的地址压入栈。
  • push edx:将CString对象的地址压入栈。
  • call ?Format@CString@@QAAXPBDZZ:调用Format函数,格式化字符串。
  • add esp, 0Ch:清理栈空间。
  • lea eax, [esp+310h+var_2F4]:准备CString对象的地址。
  • lea ecx, [esp+310h+var_2F0]:准备另一个CString对象的地址。
  • push offset a00:将字符串"00"的地址压入栈。
  • push eax:将CString对象的地址压入栈。
  • push ecx:将另一个CString对象的地址压入栈。
  • call ??H@YG?AVCString@@ABV0@PBD@Z:调用operator+函数,将字符串连接到CString对象。
  • push eax:将结果压入栈。
  • lea ecx, [esp+314h+var_2F8]:准备CString对象的地址。
  • mov byte ptr [esp+314h+var_4], 9:将立即数9写入栈内存。
  • call ??YCString@@QAEABV0@ABV0@@Z:调用CString+=操作符,将格式化后的字符串追加到CString对象。
  • lea ecx, [esp+310h+var_2F0]:准备CString对象的地址。
  • mov byte ptr [esp+310h+var_4], 8:将立即数8写入栈内存。
  • call ??1CString@@QAE@XZ:调用CString的析构函数。
  • mov eax, dword ptr [esp+310h+var_2FC]:从栈中加载一个值到eax
  • xor ebx, ebx:将ebx寄存器清零。
  • mov bl, ah:将ah的值复制到bl
  • add bl, al:将blal相加。
  • mov al, byte ptr [esp+310h+var_300]:从栈中加载一个值到al
  • add bl, al:将blal相加。

5. 代码段

loc_4501EF:
mov     eax, dword ptr [esp+310h+var_2FC]
mov     ecx, [esp+310h+lpMem]
xor     edx, edx
mov     dl, [eax+ecx]
push    edx
lea     edx, [esp+314h+var_2F4]
push    offset a02x    ; "%02X"
push    edx            ; this
call    ?Format@CString@@QAAXPBDZZ ; CString::Format(char const *,...)
add     esp, 0Ch
lea     eax, [esp+310h+var_2F4]
lea     ecx, [esp+310h+var_2F8]
push    eax
call    ??YCString@@QAEABV0@ABV0@@Z ; CString::operator+=(CString const &)
mov     ecx, dword ptr [esp+310h+var_2FC]
mov     edx, [esp+310h+lpMem]
mov     al, [ecx+edx]
add     bl, al
mov     eax, [esp+310h+var_300]
dec     eax
mov     [esp+310h+var_300], eax
jnz     short loc_450276
  • mov eax, dword ptr [esp+310h+var_2FC]:从栈中加载一个值到eax
  • mov ecx, [esp+310h+lpMem]:从栈中加载一个值到ecx
  • xor edx, edx:将edx寄存器清零。
  • mov dl, [eax+ecx]:从eax+ecx指向的内存地址加载一个字节到dl
  • push edx:将edx的值压入栈。
  • lea edx, [esp+314h+var_2F4]:准备CString对象的地址。
  • push offset a02x:将格式化字符串"%02X"的地址压入栈。
  • push edx:将CString对象的地址压入栈。
  • call ?Format@CString@@QAAXPBDZZ:调用Format函数,格式化字符串。
  • add esp, 0Ch:清理栈空间。
  • lea eax, [esp+310h+var_2F4]:准备CString对象的地址。
  • lea ecx, [esp+310h+var_2F8]:准备另一个CString对象的地址。
  • push eax:将CString对象的地址压入栈。
  • call ??YCString@@QAEABV0@ABV0@@Z:调用CString+=操作符,将格式化后的字符串追加到CString对象。
  • mov ecx, dword ptr [esp+310h+var_2FC]:从栈中加载一个值到ecx
  • mov edx, [esp+310h+lpMem]:从栈中加载一个值到edx
  • mov al, [ecx+edx]:从ecx+edx指向的内存地址加载一个字节到al
  • add bl, al:将blal相加。
  • mov eax, [esp+310h+var_300]:从栈中加载一个值到eax
  • dec eax:将eax减1。
  • mov [esp+310h+var_300], eax:将eax的值写回栈内存。
  • jnz short loc_450276:如果eax不为0,则跳转到loc_450276

6. 代码段

mov     al, bl
lea     ecx, [esp+310h+var_2F4]
neg     al
and     eax, 0FFh
mov     ebp, 1
push    eax
push    offset a02x_2  ; "%02X\r\n"
push    ecx            ; this
call    ?Format@CString@@QAAXPBDZZ ; CString::Format(char const *,...)
add     esp, 0Ch
lea     edx, [esp+310h+var_2F4]
lea     ecx, [esp+310h+var_2F8]
push    edx
call    ??YCString@@QAEABV0@ABV0@@Z ; CString::operator+=(CString const &)
mov     eax, [esp+310h+var_2F8]
mov     ecx, [eax-8]
push    ecx            ; unsigned int
push    eax            ; void *
lea     ecx, [esp+318h+var_2E4] ; this
call    ?Write@CFile@@UAEXPBXI@Z ; CFile::Write(void const *,uint)
  • mov al, bl:将bl的值复制到al
  • lea ecx, [esp+310h+var_2F4]:准备CString对象的地址。
  • neg al:取反al的值。
  • and eax, 0FFh:将eax0xFF进行与操作。
  • mov ebp, 1:将立即数1写入ebp
  • push eax:将eax的值压入栈。
  • push offset a02x_2:将格式化字符串"%02X\r\n"的地址压入栈。
  • push ecx:将CString对象的地址压入栈。
  • call ?Format@CString@@QAAXPBDZZ:调用Format函数,格式化字符串。
  • add esp, 0Ch:清理栈空间。
  • lea edx, [esp+310h+var_2F4]:准备CString对象的地址。
  • lea ecx, [esp+310h+var_2F8]:准备另一个CString对象的地址。
  • push edx:将CString对象的地址压入栈。
  • call ??YCString@@QAEABV0@ABV0@@Z:调用CString+=操作符,将格式化后的字符串追加到CString对象。
  • mov eax, [esp+310h+var_2F8]:从栈中加载一个值到eax
  • mov ecx, [eax-8]:从eax指向的地址向前偏移8字节加载数据到ecx
  • push ecx:将ecx的值压入栈。
  • push eax:将eax的值压入栈。
  • lea ecx, [esp+318h+var_2E4]:准备CFile对象的地址。
  • call ?Write@CFile@@UAEXPBXI@Z:调用CFile::Write函数,将数据写入文件。

7. 代码段

loc_450276:
mov     eax, dword ptr [esp+310h+var_2FC]
inc     eax
cmp     eax, edi
mov     dword ptr [esp+310h+var_2FC], eax
jb      loc_450089
  • mov eax, dword ptr [esp+310h+var_2FC]:从栈中加载一个值到eax
  • inc eax:将eax寄存器的值加1。
  • cmp eax, edi:将eaxedi寄存器的值进行比较。
  • mov dword ptr [esp+310h+var_2FC], eax:将eax的值写回栈内存。
  • jb loc_450089:如果eax的值小于edi,则跳转到loc_450089

8. 代码段

loc_450276:
mov     eax, dword ptr [esp+310h+var_2FC]
inc     eax
cmp     eax, edi
mov     dword ptr [esp+310h+var_2FC], eax
jb      loc_450089
  • 与第7段代码相同,这段代码是循环的一部分,递增计数器并进行条件跳转。

9. 代码段

loc_4502CB:
mov     eax, [esp+310h+lpMem]
mov     edx, [esp+310h+var_2E4]
push    edi
push    eax
lea     ecx, [esp+318h+var_2E4]
call    dword ptr [edx+40h]
  • mov eax, [esp+310h+lpMem]:从栈中加载一个值到eax
  • mov edx, [esp+310h+var_2E4]:从栈中加载一个值到edx
  • push edi:将edi寄存器的值压入栈。
  • push eax:将eax寄存器的值压入栈。
  • lea ecx, [esp+318h+var_2E4]:准备调用函数的参数地址。
  • call dword ptr [edx+40h]:调用edx+40h指向的函数。

10. 代码段

push    offset a00000001ff ; ":00000001FF\r\n"
lea     ecx, [esp+314h+var_2F8]
call    ??4CString@@QAEABV0@PBD@Z ; CString::operator=(char const *)
mov     eax, [esp+310h+var_2F8]
mov     ecx, [eax-8]
push    ecx            ; unsigned int
push    eax            ; void *
lea     ecx, [esp+318h+var_2E4] ; this
call    ?Write@CFile@@UAEXPBXI@Z ; CFile::Write(void const *,uint)
lea     ecx, [esp+310h+var_2F8] ; this
mov     byte ptr [esp+310h+var_4], 7
call    ??1CString@@QAE@XZ ; CString::~CString(void)
lea     ecx, [esp+310h+var_2F4] ; this
mov     byte ptr [esp+310h+var_4], 5
call    ??1CString@@QAE@XZ ; CString::~CString(void)
jmp     short loc_4502DC
  • push offset a00000001ff:将字符串":00000001FF\r\n"的地址压入栈。
  • lea ecx, [esp+314h+var_2F8]:准备CString对象的地址。
  • call ??4CString@@QAEABV0@PBD@Z:调用CString的赋值操作符,将字符串赋值给CString对象。
  • mov eax, [esp+310h+var_2F8]:从栈中加载一个值到eax
  • mov ecx, [eax-8]:从eax指向的地址向前偏移8字节加载数据到ecx
  • push ecx:将ecx的值压入栈。
  • push eax:将eax的值压入栈。
  • lea ecx, [esp+318h+var_2E4]:准备CFile对象的地址。
  • call ?Write@CFile@@UAEXPBXI@Z:调用CFile::Write函数,将数据写入文件。
  • lea ecx, [esp+310h+var_2F8]:准备CString对象的地址。
  • mov byte ptr [esp+310h+var_4], 7:将立即数7写入栈内存。
  • call ??1CString@@QAE@XZ:调用CString的析构函数。
  • lea ecx, [esp+310h+var_2F4]:准备另一个CString对象的地址。
  • mov byte ptr [esp+310h+var_4], 5:将立即数5写入栈内存。
  • call ??1CString@@QAE@XZ:调用另一个CString的析构函数。
  • jmp short loc_4502DC:跳转到loc_4502DC

11. 代码段

loc_4502DC:            ; this
lea     ecx, [esp+310h+var_2E4]
call    ?Close@CFile@@UAEXXZ ; CFile::Close(void)
lea     eax, [esp+310h+var_2F0]
lea     ecx, [esp+310h+var_2D4]
push    eax            ; CString *
call    sub_4507B0
mov     ecx, [eax]
mov     byte ptr [esp+310h+var_4], 0Ah
push    ecx            ; ArgList
push    2AFAh
call    sub_4A5A70
mov     edx, dword_55990C
add     esp, 4
push    eax            ; Format
push    edx            ; int
call    sub_492B00
add     esp, 0Ch
mov     byte ptr [esp+310h+var_4], 5
lea     ecx, [esp+310h+var_2F0]
jmp     loc_4503E4
  • lea ecx, [esp+310h+var_2E4]:准备CFile对象的地址。
  • call ?Close@CFile@@UAEXXZ:调用CFile::Close函数,关闭文件。
  • lea eax, [esp+310h+var_2F0]:准备CString对象的地址。
  • lea ecx, [esp+310h+var_2D4]:准备另一个地址。
  • push eax:将CString对象的地址压入栈。
  • call sub_4507B0:调用sub_4507B0函数。
  • mov ecx, [eax]:从eax指向的地址加载数据到ecx
  • mov byte ptr [esp+310h+var_4], 0Ah:将立即数0Ah写入栈内存。
  • push ecx:将ecx的值压入栈。
  • push 2AFAh:将立即数2AFAh压入栈。
  • call sub_4A5A70:调用sub_4A5A70函数。
  • mov edx, dword_55990C:加载全局变量的地址。
  • add esp, 4:清理栈空间。
  • push eax:将eax的值压入栈。
  • push edx:将全局变量的地址压入栈。
  • call sub_492B00:调用sub_492B00函数。
  • add esp, 0Ch:清理栈空间。
  • mov byte ptr [esp+310h+var_4], 5:将立即数5写入栈内存。
  • lea ecx, [esp+310h+var_2F0]:准备CString对象的地址。
  • jmp loc_4503E4:跳转到loc_4503E4

12. 代码段

loc_45032C:            ; this
lea     ecx, [esp+310h+var_300]
call    ??0CString@@QAE@XZ ; CString::CString(void)
lea     eax, [esp+310h+var_2F0]
mov     bl, 0Bh
push    eax            ; CString *
lea     ecx, [esp+314h+var_2D4]
mov     byte ptr [esp+314h+var_4], bl
call    sub_4507B0
mov     ecx, [eax]
mov     byte ptr [esp+310h+var_4], 0Ch
push    ecx            ; ArgList
push    4E25h
call    sub_4A5A70
mov     edx, dword_55990C
add     esp, 4
push    eax            ; Format
push    edx            ; int
call    sub_492B00
add     esp, 0Ch
lea     ecx, [esp+310h+var_2F0] ; this
mov     byte ptr [esp+310h+var_4], bl
call    ??1CString@@QAE@XZ ; CString::~CString(void)
lea     eax, [esp+310h+var_2F0]
lea     ecx, [esp+310h+var_2D4]
push    eax            ; CString *
call    sub_4507B0
mov     ecx, [eax]
mov     byte ptr [esp+310h+var_4], 0Dh
push    ecx
push    4E25h
call    sub_4A5A70
add     esp, 4
lea     edx, [esp+314h+var_300]
push    eax            ; char *
push    edx            ; this
call    ?Format@CString@@QAAXPBDZZ ; CString::Format(char const *,...)
add     esp, 0Ch
lea     ecx, [esp+310h+var_2F0] ; this
mov     byte ptr [esp+310h+var_4], bl
call    ??1CString@@QAE@XZ ; CString::~CString(void)
mov     edx, [esp+310h+var_300]
push    30h ; '0'       ; unsigned int
push    0              ; char *
push    edx            ; char *
mov     ecx, ebp       ; this
call    sub_403C90
mov     byte ptr [esp+310h+var_4], 5
lea     ecx, [esp+310h+var_300] ; this
  • lea ecx, [esp+310h+var_300]:准备CString对象的地址。
  • call ??0CString@@QAE@XZ:调用CString的构造函数,创建CString对象。
  • lea eax, [esp+310h+var_2F0]:准备CString对象的地址。
  • mov bl, 0Bh:将立即数0Bh写入bl
  • push eax:将CString对象的地址压入栈。
  • lea ecx, [esp+314h+var_2D4]:准备另一个地址。
  • mov byte ptr [esp+314h+var_4], bl:将立即数0Bh写入栈内存。
  • call sub_4507B0:调用sub_4507B0函数。
  • mov ecx, [eax]:从eax指向的地址加载数据到ecx
  • mov byte ptr [esp+310h+var_4], 0Ch:将立即数0Ch写入栈内存。
  • push ecx:将ecx的值压入栈。
  • push 4E25h:将立即数4E25h压入栈。
  • call sub_4A5A70:调用sub_4A5A70函数。
  • mov edx, dword_55990C:加载全局变量的地址。
  • add esp, 4:清理栈空间。
  • push eax:将eax的值压入栈。
  • push edx:将全局变量的地址压入栈。
  • call sub_492B00:调用sub_492B00函数。
  • add esp, 0Ch:清理栈空间。
  • lea ecx, [esp+310h+var_2F0]:准备CString对象的地址。
  • mov byte ptr [esp+310h+var_4], bl:将立即数0Bh写入栈内存。
  • call ??1CString@@QAE@XZ:调用CString的析构函数。
  • lea eax, [esp+310h+var_2F0]:准备CString对象的地址。
  • lea ecx, [esp+310h+var_2D4]:准备另一个地址。
  • push eax:将CString对象的地址压入栈。
  • call sub_4507B0:调用sub_4507B0函数。
  • mov ecx, [eax]:从eax指向的地址加载数据到ecx
  • mov byte ptr [esp+310h+var_4], 0Dh:将立即数0Dh写入栈内存。
  • push ecx:将ecx的值压入栈。
  • push 4E25h:将立即数4E25h压入栈。
  • call sub_4A5A70:调用sub_4A5A70函数。
  • add esp, 4:清理栈空间。
  • lea edx, [esp+314h+var_300]:准备CString对象的地址。
  • push eax:将eax的值压入栈。
  • push edx:将CString对象的地址压入栈。
  • call ?Format@CString@@QAAXPBDZZ:调用Format函数,格式化字符串。
  • add esp, 0Ch:清理栈空间。
  • lea ecx, [esp+310h+var_2F0]:准备CString对象的地址。
  • mov byte ptr [esp+310h+var_4], bl:将立即数0Bh写入栈内存。
  • call ??1CString@@QAE@XZ:调用CString的析构函数。
  • mov edx, [esp+310h+var_300]:从栈中加载一个值到edx
  • push 30h:将立即数30h(即字符'0')压入栈。
  • push 0:将立即数0压入栈。
  • push edx:将edx的值压入栈。
  • mov ecx, ebp:将ebp的值复制到ecx
  • call sub_403C90:调用sub_403C90函数。
  • mov byte ptr [esp+310h+var_4], 5:将立即数5写入栈内存。
  • lea ecx, [esp+310h+var_300]:准备CString对象的地址。

13. 代码段

loc_45041C:            ; this
lea     ecx, [esp+30Ch+var_300]
call    ??0CString@@QAE@XZ ; CString::CString(void)
lea     edx, [esp+30Ch+var_2F0]
mov     bl, 0Eh
push    edx            ; CString *
lea     ecx, [esp+310h+var_170]
mov     byte ptr [esp+310h+var_4], bl
call    sub_4507B0
mov     eax, [eax]
mov     byte ptr [esp+30Ch+var_4], 0Fh
push    eax            ; ArgList
push    2AF9h
call    sub_4A5A70
mov     ecx, dword_55990C
add     esp, 4
push    eax            ; Format
push    ecx            ; int
call    sub_492B00
add     esp, 0Ch
lea     ecx, [esp+30Ch+var_2F0] ; this
mov     byte ptr [esp+30Ch+var_4], bl
call    ??1CString@@QAE@XZ ; CString::~CString(void)
lea     edx, [esp+30Ch+var_2F0]
lea     ecx, [esp+30Ch+var_170]
push    edx            ; CString *
call    sub_4507B0
mov     eax, [eax]
mov     byte ptr [esp+30Ch+var_4], 10h
push    eax
push    2AF9h
call    sub_4A5A70
add     esp, 4
lea     ecx, [esp+310h+var_300]
push    eax            ; char *
push    ecx            ; this
call    ?Format@CString@@QAAXPBDZZ ; CString::Format(char const *,...)
add     esp, 0Ch
lea     ecx, [esp+30Ch+var_2F0] ; this
mov     byte ptr [esp+30Ch+var_4], bl
call    ??1CString@@QAE@XZ ; CString::~CString(void)
mov     edx, [esp+30Ch+var_300]
push    30h ; '0'       ; unsigned int
push    0              ; char *
push    edx            ; char *
mov     ecx, ebp       ; this
call    sub_403C90
lea     ecx, [esp+30Ch+var_300] ; this
mov     byte ptr [esp+30Ch+var_4], 1
call    ??1CString@@QAE@XZ ; CString::~CString(void)
  • lea ecx, [esp+30Ch+var_300]:准备CString对象的地址。
  • call ??0CString@@QAE@XZ:调用CString的构造函数,创建CString对象。
  • lea edx, [esp+30Ch+var_2F0]:准备CString对象的地址。
  • mov bl, 0Eh:将立即数0Eh写入bl
  • push edx:将CString对象的地址压入栈。
  • lea ecx, [esp+310h+var_170]:准备另一个地址。
  • mov byte ptr [esp+310h+var_4], bl:将立即数0Eh写入栈内存。
  • call sub_4507B0:调用sub_4507B0函数。
  • mov eax, [eax]:从eax指向的地址加载数据到eax
  • mov byte ptr [esp+30Ch+var_4], 0Fh:将立即数0Fh写入栈内存。
  • push eax:将eax的值压入栈。
  • push 2AF9h:将立即数2AF9h压入栈。
  • call sub_4A5A70:调用sub_4A5A70函数。
  • mov ecx, dword_55990C:加载全局变量的地址。
  • add esp, 4:清理栈空间。
  • push eax:将eax的值压入栈。
  • push ecx:将全局变量的地址压入栈。
  • call sub_492B00:调用sub_492B00函数。
  • add esp, 0Ch:清理栈空间。
  • lea ecx, [esp+30Ch+var_2F0]:准备CString对象的地址。
  • mov byte ptr [esp+30Ch+var_4], bl:将立即数0Eh写入栈内存。
  • call ??1CString@@QAE@XZ:调用CString的析构函数。
  • lea edx, [esp+30Ch+var_2F0]:准备CString对象的地址。
  • lea ecx, [esp+30Ch+var_170]:准备另一个地址。
  • push edx:将CString对象的地址压入栈。
  • call sub_4507B0:调用sub_4507B0函数。
  • mov eax, [eax]:从eax指向的地址加载数据到eax
  • mov byte ptr [esp+30Ch+var_4], 10h:将立即数10h写入栈内存。
  • push eax:将eax的值压入栈。
  • push 2AF9h:将立即数2AF9h压入栈。
  • call sub_4A5A70:调用sub_4A5A70函数。
  • add esp, 4:清理栈空间。
  • lea ecx, [esp+310h+var_300]:准备CString对象的地址。
  • push eax:将eax的值压入栈。
  • push ecx:将CString对象的地址压入栈。
  • call ?Format@CString@@QAAXPBDZZ:调用Format函数,格式化字符串。
  • add esp, 0Ch:清理栈空间。
  • lea ecx, [esp+30Ch+var_2F0]:准备CString对象的地址。
  • mov byte ptr [esp+30Ch+var_4], bl:将立即数0Eh写入栈内存。
  • call ??1CString@@QAE@XZ:调用CString的析构函数。
  • mov edx, [esp+30Ch+var_300]:从栈中加载一个值到edx
  • push 30h:将立即数30h(即字符'0')压入栈。
  • push 0:将立即数0压入栈。
  • push edx:将edx的值压入栈。
  • mov ecx, ebp:将ebp的值复制到ecx
  • call sub_403C90:调用sub_403C90函数。
  • lea ecx, [esp+30Ch+var_300]:准备CString对象的地址。
  • mov byte ptr [esp+30Ch+var_4], 1:将立即数1写入栈内存。
  • call ??1CString@@QAE@XZ:调用CString的析构函数。

这些代码段主要涉及字符串操作、内存操作、函数调用和条件跳转。每段代码的具体功能取决于它在程序中的上下文和其他相关代码。

 楼主| durongze 发表于 2024-9-25 21:54
本帖最后由 durongze 于 2024-9-25 21:55 编辑
Cristy 发表于 2024-9-25 13:34
用的kimi免费的,但是一天好像有多少额度,搞两个手机注册换着用自己用就够了。或者用国外的gpt
poe啥的 ...

大佬,你误会我意思了。 我的意思是下面 这个帖子没有人回答,我无法结帖。我的意思是我把答案告诉你了,你在那个帖子下面回答一下,我就可以结帖了,你还可以得到88积分。 不然88积分浪费掉了。。 结果你把答案贴到这个帖子里了。
https://www.52pojie.cn/thread-1960789-1-1.html
 楼主| durongze 发表于 2024-9-26 17:49
Cristy 发表于 2024-9-25 13:34
用的kimi免费的,但是一天好像有多少额度,搞两个手机注册换着用自己用就够了。或者用国外的gpt
poe啥的 ...

大佬下面这个帖子你还可以帮忙回复吗?有60个积分。
答案是: 使用 Message Text 可以输出对应的信息   。
https://www.52pojie.cn/thread-1947952-1-1.html
Cristy 发表于 2024-9-26 17:57
在这个帖子下可以申请撤回,可以返还你60CB
https://www.52pojie.cn/thread-1875228-1-1.html
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-12 22:00

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表