吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 816|回复: 10
收起左侧

[已解决] 汇编问题

[复制链接]
qwerzxc 发表于 2023-3-3 20:51
25吾爱币
大佬们,我只知道在16位用法中assume ds:data_segment就可以在后面调用他的段里面的数据了
那么在32位中 assume eax:ptr 变量,这个语句是啥意思啊大佬们这个变量是结构体变量
同样 local eax:ptr 变量名,这个语句干嘛的啊大佬们

最佳答案

查看完整内容

assume eax:ptr 后面应该跟着一个类型结构 这个语句后面就是让编译器认为eax是指向那个结构的指针, 这样后面的代码就可以写的可读性高一些! 类似这样 struct STRUCT_1 { int val1; int val2; int val3; int val4; } assume eax:ptr STRUCT_1 ;后面就可以用eax和变量名来引用结构中的成员 mov ecx, [eax].val1 ; 如果没有上面那句这里应该是这样写 mov ecx, dword ptr [eax], 可读性 ...

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

tfrist 发表于 2023-3-3 20:51
本帖最后由 tfrist 于 2023-3-4 07:59 编辑

assume eax:ptr 后面应该跟着一个类型结构
这个语句后面就是让编译器认为eax是指向那个结构的指针, 这样后面的代码就可以写的可读性高一些!

类似这样

struct STRUCT_1
{
     int val1;
     int val2;
     int val3;
     int val4;
}

assume eax:ptr STRUCT_1
;后面就可以用eax和变量名来引用结构中的成员

mov ecx, [eax].val1 ; 如果没有上面那句这里应该是这样写  mov ecx, dword ptr [eax], 可读性就差多了吧
mov [eax].val4, 0    ;mov dword ptr [eax+0c], 0
 楼主| qwerzxc 发表于 2023-3-3 21:02
大佬们,local那句写错了,应该是local 变量名:ptr 结构体变量,意思是不是定义一个强转后的局部变量?还有assume eax:ptr 结构体变量是什么意思,我不懂
wangtk1982 发表于 2023-3-3 22:55
assume eax:ptr 变量就是把以eax中的值为地址的数据,格式化ptr指向的结构体,是为了方便对结构体子成员的引用.假如成员xdata在结构体偏移量是x,mov ecx,[eax + x] 就可以写成mov ecx,[eax].xdata,提高可读性。

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
qwerzxc + 1 + 1 热心回复!

查看全部评分

tfrist 发表于 2023-3-4 08:08
local 这个有没有代码?我手头也没有样例。
其实应该类似的
把一个局部变量定义为一个结构的指针然后后面引用。

struct STRUCT_1
{
     int val1;
     int val2;
     int val3;
     int val4;
}

local  obj : ptr STRUCT_1

类似这样用
mov ecx, [obj].var2
我是凭感觉写的 大体就是这样!
 楼主| qwerzxc 发表于 2023-3-4 08:15
本帖最后由 qwerzxc 于 2023-3-4 08:29 编辑

struct STRUCT_1
{
     struct STRUCT_2
     int val2;
     int val3;
     int val4;
}
struct STRUCT_2
{
     int val5;     int val6;
     int val7;
}


local @t1:ptr STRUCT_2
assume ebx:ptr STRUCT_1
mov eax,[ebx].val3
mov @t1,eax
 楼主| qwerzxc 发表于 2023-3-4 08:16
本帖最后由 qwerzxc 于 2023-3-4 08:32 编辑
tfrist 发表于 2023-3-4 08:08
local 这个有没有代码?我手头也没有样例。
其实应该类似的
把一个局部变量定义为一个结构的指针然后后面 ...

大佬,我上面又重新写了一个
 楼主| qwerzxc 发表于 2023-3-4 08:32
本帖最后由 qwerzxc 于 2023-3-4 08:34 编辑
tfrist 发表于 2023-3-4 08:08
local 这个有没有代码?我手头也没有样例。
其实应该类似的
把一个局部变量定义为一个结构的指针然后后面 ...

大佬,上面那个mov @t1,eax
是不是mov [@t1].value5,eax
tfrist 发表于 2023-3-4 08:55
qwerzxc 发表于 2023-3-4 08:15
struct STRUCT_1
{
     struct STRUCT_2

local @t1:ptr STRUCT_2   ;定义一个局部变量t1 前面加@标识此变量的作用域是只有效在当前segment
assume ebx:ptr STRUCT_1
mov eax,[ebx].val3      ; 取出val3给eax寄存器
mov @t1,eax        ; 用eax的值覆盖了局部变量@t1
tfrist 发表于 2023-3-4 08:59
qwerzxc 发表于 2023-3-4 08:32
大佬,上面那个mov @t1,eax
是不是mov [@t1].value5,eax

我回复了你的帖子 我在你的代码上加了注释

mov @t1, eax 和 mov [@t1].value5,eax 完全不同!
前者是用eax的值把@t1变量的值给覆盖了,也就是说这之后 @t1就可能不一定是一个STRUCT_2的指针了。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-11-24 23:27

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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