莣孒嬡沵芣蓜 发表于 2021-1-29 21:11

小白成长日记之汇编语言参数的传值与读取

**** Hidden Message *****
jge这个判断语句在汇编指令里面是JGE/JNL 大于或等于转移.
其实就是应对源码里面那个最小数是否大于最大数 如果大于就不跳了往下走
这条 00401079   .B8 00000000      mov eax,0x0
给eax赋值一个0然后走jmp
jmp是无条件跳转的意思,jmp是跳转到尾部返回0的
那么我们就明白了 参数1是ebp+8参数2是 ebp+c
这个是怎么看出来呢!我们在寄存器ebp的位置右击然后堆栈窗口跟随就可以看到我们的参数了
前面让大家看寄存器与堆栈的关系这里应该有点简略的理解了

点了之后堆栈下面会自动定位过来了,堆栈就在寄存器下面
我们双击栈顶就可以指定位置了。

我们是ebp堆栈窗口跟随过来所以这里的指针就是ebp+XX的
我们直接对着加+8右击一下选择修改就可以看到数值,分别是100和700 所以说易语言子程序中给定的参数他会加载到堆栈空间里面


我们知道参数来源之后就可以用它了继续往下看
00401083   > \51            push ecx
00401084   .52            push edx
00401085   .0F31          rdtsc
00401087   .B9 17000000   mov ecx,0x17
0040108C   .F7E1          mul ecx
0040108E   .83C0 07       add eax,0x7


PUSH 把字压入堆栈. 就是把ecx的值压进栈中
下面也是同理 把edx的值压进栈中
RDTSC - 读取时间标签计数器 将处理器的时间标签计数器的当前值加载到 EDX:EAX 寄存器。这个我看了其他汇编取随机数的源码 应该等价于我们的置随机数种子 因为易语言通过支持库取随机数也是需要置随机数种子然后mov ecx,17不用说了吧 这个是给exc传输(赋值)17MUL 无符号乘法.结果回送AH和AL(字节运算),或DX和AX(字运算),结果返回给eaxadd不用说了把,就是加法 操作数就是 eax,加7 最后保存在eax里面
00401091   .8B4D 0C       mov ecx,dword ptr ss:00401094   .2B4D 08       sub ecx,dword ptr ss:00401097   .41            inc ecx00401098   .33D2          xor edx,edx这条前面第一条条就不说了把前面讲过了 就是就是读取ebp+c的值传输给ecx 这个sub是减法 操作数是 ecx的值跟ebp+8的值相减 结果保存在ecx里面inc这个指令是加1的意思 操作数是ecx功能是ecx本身的值加1xor这个指令异或运算. 最后的结果保存在edx里面 操作数是edx后面这几段一次性讲完吧!0040109A   .F7F1          div ecx0040109C   .0355 08       add edx,dword ptr ss:0040109F   .8BC2          mov eax,edx004010A1   .5A            pop edx004010A2   .59            pop ecx004010A3   .C9            leave004010A4   .C2 0800       retn 0x8
DIV 无符号除法.结果回送:商回送AL,余数回送AH, (字节运算);或 商回送AX,余数回送DX, (字运算).add edx,dword ptr ss: edx的值加ebp+8的值 返回给edx 最后把edx的值传送给eax 就是这段 0040109F   .8BC2          mov eax,edx然后通过pop指令出栈 我们前面进栈现在要出栈了 (据说是为了堆栈平衡)释放当前子程序在堆栈中的局部变量,使BP和SP恢复成最近一次的ENTER指令被执行前的值然后返回一个8回去 子程序返回eax的值 信息框读取eax的值显示出来本文虽然内容短小,但是收获甚大,我们总结出以下知识点一个子程序的参数或者变量都是在子程序被调用之后把他们的数据分别压入堆栈中大家可以看这里 ebp+8参数1 (变量1)ebp+c 参数2 (变量2)以此类推下去 你明白了吗。最后就是返回的解释了 我们看代码结尾是先把edx的值赋值给eax 然后出栈 平衡堆栈然后有一个返回,其实就是子程序把代码执行完毕了,然后把eax的值返回回去,因为我们的子程序是有返回值的
可以用信息框接收子程序的返回内容





fyh505099 发表于 2021-1-30 11:35

支持支持,希望能跟上大佬的步伐

hellohexiang 发表于 2021-1-30 12:29

感谢您的作品

POP 发表于 2021-1-30 17:10

感谢您的作品

影风 发表于 2021-1-30 18:21

让 江小白 来看看帖子里藏了啥好东西~~~

haier8917 发表于 2021-2-5 00:53

谢谢楼主的无私奉献学到了汇编知识

a8152070 发表于 2021-3-31 14:38

学习一下,谢谢分享

a83400489 发表于 2021-4-12 16:32

感谢楼主学习了 慢慢跟上大佬的脚步

xx9620 发表于 2021-4-18 18:44


感谢大佬的教程

234722457 发表于 2021-4-25 23:09

支持支持,希望能跟上大佬的步伐
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: 小白成长日记之汇编语言参数的传值与读取