qwerzxc 发表于 2023-3-3 20:51

汇编问题

大佬们,我只知道在16位用法中assume ds:data_segment就可以在后面调用他的段里面的数据了
那么在32位中 assume eax:ptr 变量,这个语句是啥意思啊大佬们这个变量是结构体变量
同样 local eax:ptr 变量名,这个语句干嘛的啊大佬们

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, .val1 ; 如果没有上面那句这里应该是这样写mov ecx, dword ptr , 可读性就差多了吧
mov .val4, 0    ;mov dword ptr , 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, 就可以写成mov ecx,.xdata,提高可读性。

tfrist 发表于 2023-3-4 08:08

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

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

localobj : ptr STRUCT_1

类似这样用
mov ecx, .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,.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{:301_998:}

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,.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的指针了。
页: [1] 2
查看完整版本: 汇编问题