分析1:

Private Sub Command1_Click()
Dim x As Integer, y As Integer, z As Integer
x = 123
y = 321
z = x + y
MsgBox z

End Sub

[Command1.Click]
:00401874  F47B              LitI2_Byte          ;Push 7B //123入栈
:00401876  707AFF            FStI2               ;Pop WORD [LOCAL_0086] //弹出0086操作数
                                                                        //整形占2个字
{x=123}
:00401879  F34101            LitI2               ;Push 0141 //321入栈
:0040187C  7078FF            FStI2               ;Pop WORD [LOCAL_0088] //弹出0088操作数
                                                                        //正好是0086+2,说明内存写时是连续的
{y=321}
:0040187F  6B7AFF            FLdI2               ;Push WORD [LOCAL_0086] //f?load?i2应该是integer
:00401882  6B78FF            FLdI2               ;Push WORD [LOCAL_0088] //继续第二个参数入栈
:00401885  A9                AddI2               ; //整数相加,保存在0088+2
{z = x + y}
:00401886  7076FF            FStI2               ;Pop WORD [LOCAL_008A] //SUM出栈待用

================ //MsgBox原形
MsgBox(prompt[, buttons] [, title] [, helpfile, context])
================

:00401889  2704FF            LitVar              ;PushVar LOCAL_00FC //未负值参数,context
:0040188C  2724FF            LitVar              ;PushVar LOCAL_00DC //未负值参数,helpfile
:0040188F  2744FF            LitVar              ;PushVar LOCAL_00BC //未负值参数,title
:00401892  F500000000        LitI4               ;Push 00000000 //buttons 缺省值为 0
:00401897  0476FF            FLdRfVar            ;Push LOCAL_008A //prompt,作为显示在对话框中的消息.
:0040189A  4D64FF0240        CVarRef             ;

**********Reference To->msvbvm60.rtcMsgBox
                               |
:0040189F  0A00001400        ImpAdCallFPR4       ;Call ptr_00401020; check stack 0014; Push EAX //调用MsgBox
{MsgBox z}
:004018A4  36060044FF24FF04  FFreeVar            ;Free 0006/2 variants //释放变量
:004018AD  13                ExitProcHresult     ; //退出程序

分析2:

Private Sub Command1_Click()
Dim x As Integer, y As Integer, z As Integer
x = 123
y = 321
z = x + y
MsgBox z, vbOKOnly, "pcode"

End Sub

[Command1.Click]

:00401888  F47B              LitI2_Byte          ;Push 7B //123入栈
:0040188A  707AFF            FStI2               ;Pop WORD [LOCAL_0086] //弹出0086操作数
{x=123}
:0040188D  F34101            LitI2               ;Push 0141 //321入栈
:00401890  7078FF            FStI2               ;Pop WORD [LOCAL_0088] //弹出0088操作数
{y=321}
:00401893  6B7AFF            FLdI2               ;Push WORD [LOCAL_0086] //ADD第一个参数入栈
:00401896  6B78FF            FLdI2               ;Push WORD [LOCAL_0088] //ADD第二个参数入栈
:00401899  A9                AddI2               ; //ADD
{z = x + y}
:0040189A  7076FF            FStI2               ;Pop WORD [LOCAL_008A] //SUM出栈待用
:0040189D  2704FF            LitVar              ;PushVar LOCAL_00FC //未负值参数,context
:004018A0  2724FF            LitVar              ;PushVar LOCAL_00DC //未负值参数,helpfile
******Possible String Ref To->"pcode"
                               |
:004018A3  3A54FF0000        LitVarStr           ;PushVarString ptr_004013C8 //"pcode"入栈
:004018A8  4E44FF            FStVarCopyObj       ;[LOCAL_00BC]=vbaVarDup(Pop) //地址负值
:004018AB  0444FF            FLdRfVar            ;Push LOCAL_00BC //title果然被负值,看来分析并没有错误
:004018AE  F500000000        LitI4               ;Push 00000000 //buttons 缺省值为 0
:004018B3  0476FF            FLdRfVar            ;Push LOCAL_008A //prompt,SUM
:004018B6  4D64FF0240        CVarRef             ;
**********Reference To->msvbvm60.rtcMsgBox
                               |
:004018BB  0A01001400        ImpAdCallFPR4       ;Call ptr_00401020; check stack 0014; Push EAX //调用MsgBox
{MsgBox z, vbOKOnly, "pcode"}
:004018C0  36060044FF24FF04  FFreeVar            ;Free 0006/2 variants //释放变量
:004018C9  13                ExitProcHresult     ; //退出程序
:004018CA  0000              LargeBos            ;IDE beginning of line with 00 byte codes

分析3:

Private Declare Function MessageBox Lib "user32" Alias "MessageBoxA" (ByVal hwnd As Long, ByVal lpText As String, ByVal lpCaption As String, ByVal wType As Long) As Long

Const MB_OK = &H0&

Private Sub Command1_Click()
Dim x As Integer, y As Integer, z As Integer
x = 123
y = 321
z = x + y
MessageBox Me.hwnd, "sum=" & z, "pcode", MB_OK

End Sub

[Command1.Click]

:004018FC  F47B              LitI2_Byte          ;Push 7B //123入栈
:004018FE  707AFF            FStI2               ;Pop WORD [LOCAL_0086] //弹出0086操作数
{x = 123}
:00401901  F34101            LitI2               ;Push 0141 //321入栈
:00401904  7078FF            FStI2               ;Pop WORD [LOCAL_0088] //弹出0088操作数
{x = 123}
:00401907  6B7AFF            FLdI2               ;Push WORD [LOCAL_0086] //ADD第一个参数入栈
:0040190A  6B78FF            FLdI2               ;Push WORD [LOCAL_0088] //ADD第二个参数入栈
:0040190D  A9                AddI2               ; /ADD
{z = x + y}
:0040190E  7076FF            FStI2               ;Pop WORD [LOCAL_008A] //SUM出栈待用
:00401911  0470FF            FLdRfVar            ;Push LOCAL_0090 //将地址入栈,记录地址
:00401914  080800            FLdPr               ;[SR]=[STACK_0008]
:00401917  0D58000000        VCallHresult        ;Call ptr_004014CC //这里应该是调用Me.hwnd,保存在0090
==================//MsgBox原形
int MessageBox(

HWND hWnd, // handle of owner window
    LPCTSTR lpText, // address of text in message box
    LPCTSTR lpCaption, // address of title of message box 
    UINT uType  // style of message box
   );
==================//下面是参数入栈
:0040191C  F500000000        LitI4               ;Push 00000000 //uType,参数一
******Possible String Ref To->"pcode"
                               |
:00401921  1B0100            LitStr              ;Push ptr_00401624 //装入"pcode"字符
:00401924  0460FF            FLdRfVar            ;Push LOCAL_00A0
:00401927  34                CStr2Ansi           ;vbaStrToAnsi //把Unicode形式转换为Ansi
:00401928  6C60FF            ILdRf               ;Push DWORD [LOCAL_00A0] //lpCaption,参数二
******Possible String Ref To->"sum="
                               |
:0040192B  1B0200            LitStr              ;Push ptr_00401614 //装入"sum="字符
:0040192E  6B76FF            FLdI2               ;Push WORD [LOCAL_008A] //参数SUM入栈
:00401931  FBFD              CStrUI1             ;vbaStrI2 //将整数转换为字符型,保存在0094
:00401933  236CFF            FStStrNoPop         ;SysFreeString [LOCAL_0094]; [LOCAL_0094]=[stack]
:00401936  2A                ConcatStr           ;vbaStrCat //连接字符,保存在0098
:00401937  2368FF            FStStrNoPop         ;SysFreeString [LOCAL_0098]; [LOCAL_0098]=[stack]
:0040193A  0464FF            FLdRfVar            ;Push LOCAL_009C //将地址入栈,记录地址
:0040193D  34                CStr2Ansi           ;vbaStrToAnsi //把Unicode形式转换为Ansi
:0040193E  6C64FF            ILdRf               ;Push DWORD [LOCAL_009C] //lpText,参数三
:00401941  6C70FF            ILdRf               ;Push DWORD [LOCAL_0090] //hWnd,参数四
***********Reference To:user32.MessageBoxA
                              |
:00401944  0A03001000        ImpAdCallFPR4       ;Call ptr_004015E8; check stack 0010; Push EAX //调用MessageBox
:00401949  3C                SetLastSystemError  ;Kernel GetLastError //针对调用MessageBox函数,取得扩展错误信息
:0040194A  3208006CFF68FF64  FFreeStr            ;Do SysFreeString [arg_n]; [arg_n]=0 0008/2 times ~ arg
:00401955  13                ExitProcHresult     ;
:00401956  0000              LargeBos            ;IDE beginning of line with 00 byte codes

Moodsky[DFCG]
                                                                         2005.02.01

Pcode粗略分析(1)相关推荐

  1. android ijkplayer c层分析-prepare过程与读取线程(续1-解码粗略分析)

    上文中说到在read_thread线程中有个关键函数:avformat_open_input(utils.c),应当是读取视频文件的,这个函数属于ffmpeg层.这回进入到其中去看下: int avf ...

  2. 对一个windows2000注册表项的粗略分析(转)

    对一个windows2000注册表项的粗略分析(转)[@more@] [HKLMSOFTWAREMicrosoftWindows NTCurrentVersionImage File Executio ...

  3. 【基础】裁判文书数据粗略分析,pyecharts的基本用法

    [基础]裁判文书数据粗略分析,pyecharts的基本用法 前言: 想介绍一下pyecharts的基本用法,就做个统计吧,数据来源于中国裁判文书网,关于"合同诈骗"刑事数据统计. ...

  4. (转载)Struts2源码粗略分析四:理解xwork工作原理

    http://blog.csdn.net/rcom10002/article/details/6044463 转载于:https://www.cnblogs.com/eecs2016/articles ...

  5. 安全问题-携程可能摊上大事了——崩溃原因分析

    携程数据库事件网上有各种说法.有说是数据库数据和备份数据被物理删除的.也有说是各个节点的业务代码被删除 现在重新在部署.也有说是误操作,导致业务不可用.尽管众说纷芸,做为一个技术人员,我们还是需要透过 ...

  6. Spark微博人口流动分析(1)

    思路 新浪微博API接口提供了获取附近位置的微博用户的API接口,因此尝试通过分析春节期间全国用户各地微博用户分布情况,再结合用户注册地信息,粗略分析人口流动情况. 数据获取 0:新浪微博API接口 ...

  7. CVE-2016-0143 漏洞分析(2016.4)

    CVE-2016-0143漏洞分析 0x00 背景 4月20日,Nils Sommer在exploitdb上爆出了一枚新的Windows内核漏洞PoC.该漏洞影响所有版本的Windows操作系统,攻击 ...

  8. 某少儿不宜网站图片拍摄位置分析,Python批量读取图片GPS位置!

    1. python读取图片exif属性中的GPS信息 智能手机或平板如果在拍照时开启定位服务,照片中就会记录拍照位置信息和拍摄时间.如果将原始照片直接发送发布到网上,无意中就泄漏了自己的位置信息,有恶 ...

  9. Airflow任务调度延时问题分析和优化

    作者 |  高光轩 编辑 | 高卫华 出品 | CSDN(ID:CSDNnews) 背景 airflow作为apache基金会的一款开源的优秀调度系统,目前被国内外很多大中型企业使用:其丰富的算子(o ...

最新文章

  1. 统计简单学_常用统计图表
  2. 贝叶斯网络之父Judea Pearl力荐、LeCun点赞,这篇长论文全面解读机器学习中的因果关系...
  3. git 提交 merge请求 WIP
  4. C语言字符糊到了一起,C语言速成及格课.docx
  5. sql server排序慢_用Nginx实现接口慢查询并可示化展示TOP 20
  6. my ax 4 faq
  7. Python1217作业
  8. UA STAT687 线性模型理论I 线性模型概述
  9. 使用sentinel实现限流
  10. form表单的get和post传值问题
  11. Ubuntu16.04安装谷歌浏览器
  12. 笔记|使用边框和背景(应用边框样式)
  13. LZJ的圣剑,第二次模拟赛,贪心
  14. MySQL千万级数据处理
  15. 旋转卡壳算法(转载)
  16. 单相全桥逆变原理及仿真实验
  17. 社团管理——原型设计
  18. Github搜索开源项目过滤技巧
  19. java h265_2019-04-19 使用FFMPEG 解码HEVC(H265)
  20. 用Python 操作 Excel,这篇文章别错过了!(超全总结)

热门文章

  1. 红楼梦词云制作(带背景)
  2. 新年新气象,努力奋上新时代
  3. JavaScript不清不楚之Array.isArray
  4. 多终端登录,只保留一个移动端+PC端同时在线
  5. Android Service 定时任务
  6. [1151]python连接 redis cluster集群
  7. Licheepi zero SPI Flash 系统编译
  8. 【zyc的从零开始】20211012 运算符
  9. Docker-核心篇(1)-CentOS7安装Docker社区版
  10. python脚本迁移数据库_Django 数据库迁移脚本