汇编问题
大佬们,我只知道在16位用法中assume ds:data_segment就可以在后面调用他的段里面的数据了那么在32位中 assume eax:ptr 变量,这个语句是啥意思啊大佬们这个变量是结构体变量
同样 local eax:ptr 变量名,这个语句干嘛的啊大佬们
本帖最后由 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 大佬们,local那句写错了,应该是local 变量名:ptr 结构体变量,意思是不是定义一个强转后的局部变量?还有assume eax:ptr 结构体变量是什么意思,我不懂
assume eax:ptr 变量就是把以eax中的值为地址的数据,格式化ptr指向的结构体,是为了方便对结构体子成员的引用.假如成员xdata在结构体偏移量是x,mov ecx, 就可以写成mov ecx,.xdata,提高可读性。 local 这个有没有代码?我手头也没有样例。
其实应该类似的
把一个局部变量定义为一个结构的指针然后后面引用。
struct STRUCT_1
{
int val1;
int val2;
int val3;
int val4;
}
localobj : ptr STRUCT_1
类似这样用
mov ecx, .var2
我是凭感觉写的 大体就是这样! 本帖最后由 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:32 编辑
tfrist 发表于 2023-3-4 08:08
local 这个有没有代码?我手头也没有样例。
其实应该类似的
把一个局部变量定义为一个结构的指针然后后面 ...
大佬,我上面又重新写了一个 本帖最后由 qwerzxc 于 2023-3-4 08:34 编辑
tfrist 发表于 2023-3-4 08:08
local 这个有没有代码?我手头也没有样例。
其实应该类似的
把一个局部变量定义为一个结构的指针然后后面 ...
大佬,上面那个mov @t1,eax
是不是mov [@t1].value5,eax{:301_998:} 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 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