`
buliedian
  • 浏览: 1234732 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

powerbuilder decomplier 完成基本分析和编程(图8张)

阅读更多

用了十多天,完成了基本编程,bcb编程。主要函数已经完成。目前能对struct和function解析了,win和uo的还在debug。

给一个反编译后的代码示意:还差浮点数取值(因为不同编程工具对浮点的规定不同,c++的double并非pb的double,必须取相应的bit规定来得到浮点数,for while循环(jp已经实现,但是要复活成for while还需要点工夫),枚举常量没搞定,搞定的话,就能反编译一般性的function了。不过expression分析部分结构已经很完备,只是一共500多个pcode码,现在只测试出200个。后续将大量测试pb的demos来修正之。当然自己的程序也可以作为测试之用。

//看我反编译出来的代码,感觉还比较整洁,说实话,第一次用bcb编程。但是短短几天足以领略c++的高效快速。还有就是一不小心就犯的错,比如在if条件那里对变量意外赋值了,所以保持0x0001 == var1的倒写习惯是多么重要。

//object name: lf_111.fun
global type lf_111 from function_object
end type

forward prototypes
global <FUNCTION_OR_SUBRUNTINE> <RETURN_DATATYPE> lf_111(<PARAM_LIST>) <THROWS_OBJNAME>
end prototypes

global <FUNCTION_OR_SUBRUNTINE> <RETURN_DATATYPE> lf_111(<PARAM_LIST>) <THROWS_OBJNAME>


//Variables List
anya1
intb1 = 32767
intb2 = -32767
longc1 = 655356
longc2 = -655356
longlongd1 = 9223372036854775807
longlongd2 = -9223372036854775807
reale1 = 1120403587
reale2 = 3267887235
stringls_111 = "VVVVVVVVVVVVVVVVVVVV"
charf1 = 'A'
charf2 = 'z'
charf3 = '~r'
uintg1 = 255
ulongh1 = 655357
doublej1 = 3.14159265141593
longb
stringk1 = ""
stringk2 = "this is a box"
stringk3 = "this~r~na~h13"
stringk4 = "中国中国中国中国中国中国中国中国"
datem1 = 1101-01-11
timen1 = 12:01:01.100002
datetimep1 = datetime(date(1000-07-11),time(12:01:01.000002))
decq1 = 3.14159202581504
dec{0}q2 = 3.14159202581504
dec{4}q3 = 3.14159202581504
dec{18}q4 = 3.14159202581504
decr1 = 3.14159202581504
intaaaa
longll_b
longlonglll_c
decldc_d
reallrl_e
ulonglul_f
uintlui_g
decax
longll_bb
longlonglll_cc
decldc_dd
reallrl_ee
ulonglul_ff
uintlui_gg
datastoreuo_1
booleanlbb_1
booleanlbb_2
longa
stringls_aaa
charbbb
borderlbr
borderlbr1
borderlbr2
borderlbr3
borderlbr4
borderlbr5
borderlbr6
borderlbr7
//global var: w_winw_win
//global var: w_mainw_main
longll_currentrow
datawindowadw_datawindow
stringarg_amt
stringarg_format
stringright_string

//Exprssion lines: 62
abs(j1 + 1)
beep(10)
blob("111")
b = ceiling(j1)
max(1,2)
min(1,2)
ls_aaa = rightw(ls_aaa,2) + rightw(ls_aaa,2) + rightw(ls_aaa,2)
bbb = char(ls_aaa)
j1 = abs(j1)
j1 = acos(j1)
j1 = integer(j1)
j1 = long(j1)
j1 = longlong(j1)
messagebox("j1",j1)
messagebox("q1",q1)
messagebox("q2",q2)
messagebox("q3",q3)
messagebox("q4",q4)
j1 = messagebox("r1",r1)
lbb_1 = fileexists(ls_aaa)
fileclose(a)
a += (b)
a ++
a --
a += ((1 + 2 + 3) - 4)
a += (b)
a -= (b)
a *= (b)
a = a / 1
a = b + 1 - ((2) / 3) * 4
aaaa = ll_b
aaaa = lll_c
aaaa = ldc_d
aaaa = lrl_e
aaaa = lul_f
aaaa = lui_g
return 65535
return 4.00000000011642
return 4.00000000011642 + 4.00000000011642
uo_1 = create datastore
destroy(uo_1)
lbb_1 = lbb_1 and lbb_2
open(w_win)
open(w_main)
w_win.hide()
w_win.postevent("111",1,1)
w_main.settoolbar(1,true )
w_win.show()
w_win.getparent()
w_main.hide()
w_main.show()
w_main.getparent()
adw_datawindow.setredraw(false )
ll_currentrow = adw_datawindow.getrow()
adw_datawindow.selectrow(0,false )
adw_datawindow.selectrow(ll_currentrow,true )
adw_datawindow.setfocus()
adw_datawindow.setredraw(true )
return ll_currentrow
right_string = string(arg_amt,arg_format)
right_string = left(" ",len(arg_format) - len(right_string)) + right_string
return 1

end function

//////////////////////////////////

数组下标操作费了我五个小时调整,已经很完美了,非常完美。

global <FUNCTION_OR_SUBRUNTINE> <RETURN_DATATYPE> lf_111(<PARAM_LIST>) <THROWS_OBJNAME>
//Variables List
stringls_arr0[]
stringls_arr1[10]
stringls_arr2[2 to 10]
stringls_arr3[5,6,7,8]
stringls_arr4[2 to 5,3 to 6,4 to 7,5 to 8]
stringls_local
longll_local
//global var: stringgs_array[2]
//global var: stringgs_array2[5,5]

//Exprssion lines: 14
ls_local = ls_arr0[3]
ls_local = ls_arr1[5]
ls_local = ls_arr2[5]
ls_local = ls_arr3[1,2,3,4]
ls_local = ls_arr4[3,4,5,6]
ls_local = gs_array[2]
ls_local = gs_array2[2,2]
ls_arr0[3] = ls_local
ls_arr1[5] = ls_local
ls_arr2[5] = ls_local
ls_arr3[1,2,3,4] = ls_local
ls_arr4[3,4,5,6] = ls_local
gs_array[2] = ls_local
gs_array2[2,2] = ls_local

end function

//20090904: 完成了function头部申明信息:返回数据类型,参数列表,throws类型。基本完成一个简单function的解析了:

//object name: lf_333.fun
global type lf_333 from lf_333
end type

forward prototypes
global function int lf_333(int param1,ref int param2,readonly int param3,readonly int param4) throws exception
end prototypes

global function int lf_333(int param1,ref int param2,readonly int param3,readonly int param4) throws exception;
//variables list
//param:intparam1
//param:intparam2
//param:intparam3
//param:intparam4
intli_aaa
longll_bbb
stringls_aaa
nonvisualobjectuox
nonvisualobjectuoy
nonvisualobjectuoz
intli_ccc[2,2,2] = {1,2,3,4,5,6,7,8}

//exprssion lines: 23
li_aaa = integer(getcurrentdirectory() + "aaa" + "bbb" + string(1997))
uox = create nonvisualobject
uoy = create nonvisualobject
uoz = create nonvisualobject
li_aaa = 1 + 2 + 3 + 4 + 5
li_aaa = ((((1) - 2) - 3) - 4) - 5 //括号部分后续优化之。
li_aaa = ((((1) * 2) * 3) * 4) * 5
ll_bbb = ((((1) / 2) / 3) / 4) / 5
li_aaa = integer(ll_bbb)
li_aaa = abs(li_aaa)
li_aaa = ll_bbb
ll_bbb = 1 + 2 + 3 + 4 + 5
ll_bbb = ((((1) - 2) - 3) - 4) - 5
ll_bbb = ((((1) * 2) * 3) * 4) * 5
ll_bbb = ((((1) / 2) / 3) / 4) / 5
ll_bbb = long(ll_bbb)
ll_bbb = li_ccc[1,1,1]
li_aaa = lf_count(li_aaa,li_aaa,li_aaa,ls_aaa,ls_aaa,ls_aaa)
li_aaa = lf_count2()
li_aaa = lf_count3()
li_aaa = lf_count4()
li_aaa = lf_count5()
return 1

end function

//20090905:今天很好地处理了枚举变量的初始值和赋值(取)

//object name: lf_333.fun
global type lf_333 from lf_333
end type

forward prototypes
global subroutine lf_333() throws exception
end prototypes

global subroutine lf_333() throws exception;
//variables list
alignmentla_1 = left!
alignmentla_2 = right!
alignmentla_3 = center!
alignmentla_4 = justify!
bandlb_1 = header!
bandlb_2 = detail!
bandlb_3 = footer!

//exprssion lines: 7
la_1 = left!
la_1 = right!
la_1 = center!
la_1 = justify!
lb_1 = header!
lb_1 = detail!
lb_1 = footer!

end function

//20090909:搞定了内嵌sql单行取值,并与变量直接绑定。pic6

//20090912: 完善了sql语句格式内嵌语式的参数绑定。

//20090915:完成最困难的win和uo,menu等文件格式的解析。工作接近收尾。图pic8

附图6张:

pic1:

powerbuilder decompiler by chengg0769

pic2:

powerbuilder decompiler chengg0769

pic3:

pb decomplier by chengg0769

pic4:

decompiler chengg0769

pic5:

decompiler chengg0769

pic6:

pic7 趋近完美的内嵌sql,含参数对应。

pic8: 完成win,men,uo等格式解析,接近收尾

分享到:
评论

相关推荐

    PowerBuilder编程经验谈

    综上所述,PowerBuilder编程涉及到众多知识点,包括其基本架构、DataWindow控件的使用、数据库操作、事件处理、代码组织和项目部署等。熟练掌握这些知识,将有助于你成为一名出色的PowerBuilder开发者。在实际开发...

    PowerBuilder图片浏览器

    此程序对于初学者来说是一个很好的学习实例,它展示了如何在PowerBuilder中进行非数据库驱动的应用开发,以及如何利用控件实现基本的文件操作和图像显示功能。同时,对于有经验的开发者,这个程序也可以作为一个起点...

    PowerBuilder8.3.rar

    8. **应用程序发布**:PowerBuilder可以生成可执行文件,供用户在没有安装PowerBuilder的机器上运行。此外,还可以生成.NET或Java字节码,适应不同的部署环境。 9. **调试和测试**:内置的调试器允许开发者跟踪代码...

    powerbuilder编程经验谈

    PowerBuilder是一种强大的数据库应用开发工具,它以其独特的DataWindow控件和面向对象的编程模型,深受程序员喜爱。本文将深入探讨PowerBuilder编程的一些关键知识点,结合提供的资源,为你的编程之旅提供宝贵的指导...

    PowerBuilder编程常见问题分析与解决

    本资源“PowerBuilder编程常见问题分析与解决”针对的是PowerBuilder编程过程中遇到的各种问题及其解决方案,对于开发者来说是一份宝贵的参考资料。 一、PowerBuilder基础知识 PowerBuilder是由Sybase公司开发的一...

    PowerBuilder12.0绿色版

    2. **对象导向编程**:PowerBuilder支持基于事件的面向对象编程,包括类、对象、继承、多态性和封装。这使得代码重用和项目维护变得更加容易。 3. **Visual Studio .NET 集成**:PowerBuilder 12.0加强了与...

    PowerBuilder8.0 开发工具下载

    PowerBuilder 8.0是一款由Sybase公司(现已被SAP收购)开发的强大的数据库应用程序开发工具,专门用于构建企业级的桌面和Web应用程序。它以其独特的DataWindow控件和面向对象的编程模型而闻名,使得开发人员可以高效...

    powerbuilder 9.0精彩编程百例

    读者可以通过运行和分析这些代码,了解PowerBuilder的基本工作流程和编程逻辑。 在学习过程中,读者会接触到PowerBuilder中的关键概念,如窗口(Window)、应用框架(Application)、对象(Object)、事件(Event)...

    powerbuilder11.5.rar

    PowerBuilder 11.5的新功能 包括部署PowerBuilder非可视对象(NVOs),包括.NET编译和.NET Smart Client应用 快速使用,并在Web上部署包括Web Services 和 PowerBuilder应用在内的PowerBuilder非可视对象(NVOs) 支持...

    PowerBuilder编程代码

    这个例子可能展示了如何利用PowerBuilder的图形功能和算法实现动态生成雷达图,这对于数据可视化和数据分析的应用来说是非常有价值的。 除此之外,压缩包中的"下载说明.txt"和"系统说明.txt"可能是提供关于如何下载...

    《PowerBuilder 9.0精彩编程百例》源代码

    《PowerBuilder 9.0精彩编程百例》源代码是一个专为学习PowerBuilder 9.0的开发者设计的资源集合,旨在帮助初学者和进阶者深入理解和掌握这款强大的数据库应用开发工具。PowerBuilder 9.0是Sybase公司推出的可视化...

    PowerBuilder制作的水果机小游戏

    PowerBuilder是一款强大的可视化数据库应用开发工具,以其特有的DataWindow控件和面向对象的编程模型闻名,使得开发者能够快速构建桌面应用程序。 在这款游戏中,我们可以看到以下技术点: 1. **PowerBuilder 9**:...

    powerbuilder2019下载地址

    - PowerBuilder使用面向对象编程(OOP)的概念,包括类、对象、继承、封装和多态性。 - 用户可以通过定义窗口、菜单、按钮等对象,构建复杂的用户界面,并通过继承和多态性实现代码重用。 5. **脚本语言**: - ...

    PowerBuilder 12.5手册大全

    8. **网络和Web应用程序开发**:PowerBuilder 12.5支持开发Web应用程序,包括Web窗口和Web服务,这使得传统桌面应用可以轻松扩展到互联网平台。 9. **调试和优化**:手册会介绍如何使用PowerBuilder的内置调试器...

    PowerBuilder精彩编程200例源程序光盘

    8. **报表与图表**:PowerBuilder的报表和图表功能强大,能够创建复杂的报告和分析。实例可能涵盖了如何设计动态报表,添加图表元素,以及数据的统计和分析。 9. **应用程序部署与发布**:学习如何将PowerBuilder...

    powerbuilder8.0编程百例

    6. **报表和图表**:PowerBuilder 8.0提供了内置的报表和图表功能,实例可能包括如何设计复杂的报表、图表,并与数据窗口结合,实现数据分析和展示。 7. **网络和数据库连接**:PowerBuilder支持多种数据库,如...

    PowerBuilder开发实例+源码

    代码是软件的灵魂,通过阅读和分析源码,开发者能了解到PowerBuilder的编程技巧和最佳实践。例如,如何有效地利用DataWindow控件进行数据操作,如何编写事件处理函数,以及如何实现自定义的函数和对象等。此外,源码...

    PowerBuilder8参考手册(含第四章去水印).pdf

    PowerBuilder 8是一款由Sybase公司开发的强大的可视化数据库应用程序开发工具,主要用于构建企业级的桌面和Web应用程序。本参考手册详细介绍了PowerBuilder 8的各项功能、语法和使用技巧,旨在帮助开发者更有效地...

    PowerBuilder2017下载

    PowerBuilder 2017是一款由Sybase公司(现已被SAP收购)开发的集成开发环境(IDE),专门用于构建企业级的客户端/服务器(C/S)和Web应用程序。这款强大的工具以其数据窗口控件而闻名,使得开发人员能够轻松地进行...

Global site tag (gtag.js) - Google Analytics