获得指令地址的方法 求教

闭才 2016-03-29 05:57:49
在X86-32位编程中有一种简单的获得所运行的指令地址的方法(X86-32位结构下eip寄存器是无法直接访问的)。比如说我们要获得程序中XXXX这条指令的地址并置于eax寄存器中,那么可以采用如下代码段。请补充完函数GetAddress的第一条语句。
call GetAddress:
xxxx

GetAddress:
mov _____,_____
ret

...全文
430 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
闭才 2016-03-30
  • 打赏
  • 举报
回复
引用 4 楼 zara 的回复:
不是这个意思吧。关键是那个 call 指令,你看下这个指令的内部操作过程说明,其中有个步骤就是将返回的地址(就是 call 指令的下一指令的地址)压到堆栈的,所以 call 后栈顶就是返回的地址,这样 mov 指令取到的就是返回的地址,这才可以实现目的;直接将其写在那里,谁来把那地址弄到栈顶去呢。
谢谢 这下明白了 原来我理解call压入的是rtn的地址,现在明白了原来rtn就是下条指令的地址 另刚才那个代码不算 看这个

Getadress proc
		push ebp
		mov ebp,esp
		mov eax,dword ptr[esp+4]
		pop ebp
		ret
Getadress endp
闭才 2016-03-30
  • 打赏
  • 举报
回复
差不多明白了 前一个问题已解决 第一个问题虽然还不是很清楚 但已经大概知道了 还需要补充下理论的说 代码供参考

Getadress proc
		push ebp
		mov ebp,esp
		mov  ebp,esp
		mov ecx,dword ptr[esp+4]
		mov eax,ecx
		pop ebp
		ret
Getadress endp
zara 2016-03-30
  • 打赏
  • 举报
回复
不是这个意思吧。关键是那个 call 指令,你看下这个指令的内部操作过程说明,其中有个步骤就是将返回的地址(就是 call 指令的下一指令的地址)压到堆栈的,所以 call 后栈顶就是返回的地址,这样 mov 指令取到的就是返回的地址,这才可以实现目的;直接将其写在那里,谁来把那地址弄到栈顶去呢。
闭才 2016-03-30
  • 打赏
  • 举报
回复
引用 1 楼 zara 的回复:
可以是 mov eax, dword ptr [esp]
您看是这样吗,esp默认指向栈顶,如果栈为空则指向下一条指令
闭才 2016-03-30
  • 打赏
  • 举报
回复
引用 1 楼 zara 的回复:
可以是 mov eax, dword ptr [esp]
是可以啊 还是想求教为什么 还有啊 这个命令放在就不好使了

Getadress proc
		push ebp
		mov  ebp,esp
		mov eax, dword ptr[esp]
		pop ebp
		ret
Getadress endp
zara 2016-03-30
  • 打赏
  • 举报
回复
可以是 mov eax, dword ptr [esp]
AutoLISP 培训教程 单元一:AutoLISP 主角潇洒登场 一. AutoLISP 是何方神圣? 1、AutoLISP 是 AutoCAD 的最佳拍檔! 2、AutoLISP 内含于 AutoCAD 软件内,不用另外花钱买! 3、AutoLISP 是强化 AutoCAD 最好、最直接的『程序语言』! 4、AutoLISP 易学、易用,即使不会程序设计的 AutoCAD 使用者,都能在最短的 时间内,写出令人惊 讶、赞叹的功能! 若说 AutoLISP 的出现,是替 AutoCAD 创造一片天的『最大功臣』,实不为过一点也不夸张! 5、AutoLISP 希望您去学习它、改善它、发挥它、享受它.真的!它的威力、魅力无穷! 二. AutoLISP 程序语言的特质分析: 学习 AutoLISP 是非常容易的,对初学者而言,即使没有学习过任何的程序语言,都能很快的上手,写 出精彩漂亮的 AutoLISP 程序! 语法简单:不用特殊的变量宣告,非常富有弹性,比起其它的程序语言,它的语法可说是非常简单而 有其独特的风格! 功能函数强大:除一般性的功能函数外,又拥有为数不少控制配合 AutoCAD 的特殊函数,再加上 AutoLISP 可直接呼叫执行所有 AutoCAD 的指令,以及掌握运用所有的 AutoCAD 系统变量,功能之强 大令人欣喜不已! 撰写的环境不挑剔:只要是一般的文书编辑软件都适用! 如:Windows 的记事本、PE2、PE3、DW3、 书中仙、汉书、EDIT....等 直译式程序: 不用再作编译,『即写即测、即测即用』,马上可以在 AutoCAD 中响应效果,马上就 有成就感! 横跨各作业平台:悠然自得,虽然 AutoCAD 有 DOS、Windows 版本之分但是 AutoLISP 却可在不改 写的原貌下,加载与执行! 三.撰写 AutoLISP 的动机? 1、欲强化 AutoCAD 原有指令时. 2、欲创造更有用的 AutoCAD 新指令. 3、欲简化繁琐的环境设定或绘图步骤时. 4、欲处理参数式绘图时. 5、欲做图面资料读文件、写文件. 6、欲做 AutoCAD 演示文稿展示时. 7、欲达到真正灵活掌控 AutoCAD 时. 8、欲提升自己跨上 AutoCAD 高手列车时. 四.AutoLISP 的效益评估? 1. 对公司负责人或设计主管而言: A. 也许某员工或干部花了 20 个小时撰写一个 AutoLISP 程序,表面上,这将近三天的时间,他连一张 图都没有画,甚至可能偶有发呆、沉思,若此程序一天可以替公司绘图部门节省 1 小时绘图时间,那 算一算,只要 20 天就抵销开发成本,而 20 天以后都是赚的,『用的愈久,省的愈多』! B. 若员工皆有此动力,在不影响正常工作,『鼓励』都来不及,那有『压抑』的道理,甚至还要派遣优 秀人员出去受训,学习更好的设计技巧与创意呢?! C. 千万不要因为您的不懂或压抑,SHOW 您的权威与 POWER,如此,不但对员工造成打击,甚至您可 能成为阻碍了公司计算机化进步的罪魁祸首 D. 当然,若要撰写的程序很多,内部设计人员的程序功力距离太远,达成需求的时间反而变得遥遥 无期,那倒不如求助于市面上已有的相关 AutoCAD 支持软件。 2. 对设计人员而言: A. 得到一笔提升绩效奖金呢? 当然,无形中,『AutoCAD 高手的封号』也将黄功力又往前迈出了一 大步,对个人的成长帮助匪浅,幸运的话,搞不好还可以袍加身,不亦乐乎!!! B. 『半桶水、响叮当』,千万不要因为会写 AutoLISP 程序而自傲、孤僻、嚣张起来,功力的增长, 只是让您有更多『服务他人、服务公司』的机会,若自恃过重,宁可不要! C. AutoLISP 程序功力的累进,是无远弗届的,千万不要『孤芳自赏』,『人外有人,天外有天』,也许 您觉得是『宝贝加三级』的程序,只是其它设计师基本程序中的一部份罢了! D. 既然 AutoLISP 是 AutoCAD 的『最大功臣』,当然不会轻易被舍弃,如此,您的学习,保证不会白 费! E. 『精益求精』、『虚心求教』、『用心学习、观摩』、『决心成为高手』 3.对程序本身而言: A. 少少的几行,却可能有『大大满意』的时候!!! B. 充份掌握了控制、 创造 AutoCAD 的 『尚方宝剑』 ,让您在 AutoCAD 的设计运作中 『得心应手』 , 享受无比的快乐与成就感!!! 五.如何有效的学习 AutoLISP ? 1、先由小程序着手,认识 AutoLISP 语法规定! 2、浏览所有的 AutoLISP 功能函数,重要的功能函数要熟记脑海,俗语说的好『一回生,二回熟』, 除非您不用心,否则没有学不好的道理!!! 3、要懂得偷懒:不要认为在绘图的过程中,繁琐的步骤是

21,459

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧