一个无实际意义的代码片段
vb吧
全部回复
仅看楼主
level 11
余思培 楼主
最近刚学完VB6使用函数指针以及在此过程中学习了一点汇编知识。
VB6使用函数指针是其短板,而且基本都需要调用API来达到目的。
突然受到之前学习类成员函数指针时看资料有大佬直接将汇编码嵌入到程序中实现调用。
现在有了关键词:
函数指针、嵌入汇编,我想大家想到了我想到了什么(虽然很鸡肋)
2020年11月24日 12点11分 1
level 11
余思培 楼主
我想到的是偷梁换柱,我们既然已经找到了函数指针,有一定的汇编知识,那么我们是不是可以把一个空/无意义函数改造成我们需要的函数呢?
2020年11月24日 12点11分 2
level 11
余思培 楼主
我首先想到的是尝试修改函数指针指向的内存//我事先并不知道代码段的内存的受保护程度。很显然失败了,然后我就发现了另一个API VirtualProtect,可以更改内存的保护(在这个函数加上VB关键词我发现了也有前辈使用过这种偷梁换柱的方法)
2020年11月24日 12点11分 3
level 11
余思培 楼主
然后,很简单,一个CopyMem和一个VirtualProtect API就尝试成功了。(VB6一个空函数5个字节,一个函数指针调用的函数也是5个字节,甚至都不需要专门的考虑内存问题)
2020年11月24日 12点11分 4
level 11
余思培 楼主
本楼为代码截图
2020年11月24日 12点11分 5
level 11
余思培 楼主
虽然这个代码片段很鸡肋(一个主要原因是VB6基本用不上函数指针),但是相比CallWindowProc或者我之前写的DLL而言更加灵活,因为你可以“定制”你的AddrCall,只要你的第一个参数为函数指针,后面的参数完全可以按照你想要调用的函数来
2020年11月24日 12点11分 6
level 11
汇编语言太难懂了
2020年11月25日 03点11分 7
真要系统去学可能很难,但只要学几条指令要求就没那么高了
2020年11月25日 03点11分
level 11
其实在VB里函数指针可以用类模块去实现相同的功能
比如传递不同的object实例,调用相同的函数实现不同的功能.
2020年11月27日 15点11分 8
当我看到类成员函数有一个this指针时大概也明白这一点了[笑尿],我说鸡肋是针对大部分浅学VB的人而言的[笑尿]
2020年11月27日 15点11分
1