首页
社区
课程
招聘
[求助]汇编语法不明白
2014-4-10 11:11 4547

[求助]汇编语法不明白

2014-4-10 11:11
4547
1、“@@:”
2、jmp        @b  中的 @b

小弟真心不懂,有哪位好心人提点一下

[CTF入门培训]顶尖高校博士及硕士团队亲授《30小时教你玩转CTF》,视频+靶场+题目!助力进入CTF世界

收藏
点赞0
打赏
分享
最新回复 (6)
雪    币: 135
活跃值: (64)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
fatecaster 1 2014-4-10 11:19
2
0
好像
@@是可以重复的标号,@b就是上一个@@,@f是下一个@@,不知道对不对。b=back,f=forward。实在不记得,就看看罗云彬的那本书讲过。
雪    币: 71
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
zhangsj 2014-4-10 11:29
3
0
谢谢楼上,我去看看
雪    币: 71
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
zhangsj 2014-4-10 11:37
4
0
Win32汇编的标号和 @@
(相当于C中的goto)
当在程序中使用一条跳转指令的时候,可以用标号来表示跳转的目的地,编译器在编译的时候会把它替换成地址,
标号既可以定义在目的指令同一行的头部,也可以在目的指令前一行单独用一行定义,标号定义的格式是:
标号名:         目的指令
标号的作用域是当前的子程序,在单个子程序中的标号不能同名,否则编译器不知该用哪个地址,但在不同的子程序中可以有相同名称的标号,这意味着不能从一个子程序中用跳转指令跳到另一个子程序中。
在低版本的MASM中,标号在整个程序中是惟一的,子程序中的标号也可以从整个程序的任何地方转入。
但Win32汇编使用的高版本MASM中不允许这样,这是为了提供对局部变量和参数的支持,由于在子程序入口处有对堆栈的初始化指令,所以一个子程序不允许有多个入口,其结果就是标号的作用域变成了单个子程序范围。
MASM中的@@
当用@@做标号时,可以用@F和@B来引用它,@F表示本条指令后的第一个@@标号,@B表示本条指令前的第一个@@标号,程序中可以有多个@@标号,@B和@F只寻找匹配最近的一个。
雪    币: 71
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
zhangsj 2014-4-10 11:38
5
0
确实是这样,谢谢  fatecaster
雪    币: 1252
活跃值: (510)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
zhujian 2 2014-4-15 09:48
6
0
就是为了解决汇编中,跳转命名是个麻烦的事情,发明了@@   @b   @f.
雪    币: 20
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
MiaoShi 2014-5-7 13:20
7
0
我也是新学的,把我理解的意思传达给你,理解的不对,请不要见怪.

@@:是给出一个地址也可以理解成一座房子
@b: 是前门,你要进去就走前门
@f:  是后门,你出来的时候走后门
流程是@b=>@@=>@f
@b出现就是要进一座房子,进哪个房子呢@@,进去就得出来那就走后门@f
如果没有@b的话也就是不进门后面给出房子@@无效,没有进就不会涉及到出@f的问题
如果@b进去了@@但是没有出@f,那就只能在里边待着了,再有一座房子@@你也进不去
所以出现这些情况的时候就会报错
^O^
游客
登录 | 注册 方可回帖
返回