-
-
[讨论]求教Labview编译的程序要如何入手?
-
发表于: 2026-5-26 15:01 973
-
一、为何有此疑问?
同事写的labview程序,在终端运行时会随机出现“卡住”的现象。中等概率事件,有时候一天出现几次,有时候一周都不会出现。软件中插入调试日志等手段后,仍未找到原因。为了探索问题点,想要通过“附件进程”的方式,协助debug。
二、一些准备工作。
因为对于labview我是一个完全不懂的小白,只好通过网络搜寻了一些帖子来学习思路。
帖子:bbs.kanxue.com/thread-170771.htm
回帖讯息:
曾半仙 12
9 楼
Labview编译的程序和PB/VB类似都要用专用工具分析,怎么入手要看分析结果,发布过程如果去掉过代码视图后,基本就无法分析流程,只能打hook lvrt的主意了。
2013-5-19 14:11
从中得到的讯息是:要从LabVIEW运行时库(lvrt.dll) 入手。
帖子:fa9K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6%4N6%4N6Q4x3X3f1#2x3Y4m8G2K9X3W2W2i4K6u0W2j5$3&6Q4x3V1k6@1K9s2u0W2j5h3c8Q4x3X3b7I4x3K6R3H3z5o6R3J5i4K6u0V1x3g2)9J5k6o6q4Q4x3X3g2Z5N6r3#2D9
帖子摘要:
......
今天的主题是追踪内存,看看其与其他语言有啥区别
我用labview 2020,设计了一个简单比较
然后用OD去跟
发现还是区别很大
一堆的call 而且都不系统的api
但都是lvrt.xxxxx......
从中得到的讯息是:寻找合适的函数lvrt.xxxxx作为突破口。
通过WindowsAPI 获取到本地labview2013 32位版本生成的测试程序的信息:
请输入目标进程的 PID: 6888
已选择 PID=6888
[+] 进程已打开, 句柄=0x000000E4
[*] 目标进程位数: 32 位
[+] lvrt.dll 基址: 0x30000000
[*] 正在解析 lvrt.dll 符号表...
[+] 已解析 1987 个 lvrt.dll 导出符号
[*] lvrt.GetDSFromVIRef 函数表基址: 0x304D7540
[*] lvrt.LVRTTable 函数表基址: 0x30C40DB0
请选择操作:
1. 穷举扫描所有表偏移 (显示函数名)
开始穷举扫描 LVRTTable (偏移 0 ~ 0x1B0C, 步长4)...
偏移 0x000 (索引 0): 0x307ABE60 -> SwapWL
偏移 0x004 (索引 1): 0x307ABE80 -> SwapBW
偏移 0x008 (索引 2): 0x307ABEA0 -> RevBL
偏移 0x00C (索引 3): 0x307ABEE0 -> RevBQ
偏移 0x010 (索引 4): 0x30799020 -> Abs
偏移 0x014 (索引 5): 0x30798FE0 -> Min
偏移 0x018 (索引 6): 0x30799000 -> Max
偏移 0x01C (索引 7): 0x307988D0 -> IsDigit
偏移 0x020 (索引 8): 0x307988F0 -> IsAlpha
偏移 0x024 (索引 9): 0x30798E90 -> IsLower
偏移 0x028 (索引 10): 0x30798EC0 -> IsUpper
偏移 0x030 (索引 12): 0x307AE840 -> CPStrSize
偏移 0x034 (索引 13): 0x307AE870 -> CPStrCmp
偏移 0x038 (索引 14): 0x307AEE00 -> CPStrInsert
偏移 0x03C (索引 15): 0x307AEA80 -> CPStrRemove
偏移 0x040 (索引 16): 0x307AEC20 -> CPStrReplace
偏移 0x044 (索引 17): 0x307AEBB0 -> CPStrIndex
偏移 0x048 (索引 18): 0x30798980 -> StrLen
偏移 0x04C (索引 19): 0x307989A0 -> StrCat
偏移 0x050 (索引 20): 0x307989D0 -> StrCpy
偏移 0x054 (索引 21): 0x307989F0 -> StrNCpy
偏移 0x058 (索引 22): 0x30798A40 -> StrCmp
偏移 0x05C (索引 23): 0x30798B20 -> StrNCmp
偏移 0x060 (索引 24): 0x30794330 -> BlockCmp
偏移 0x064 (索引 25): 0x3079AC80 -> PStrCat
偏移 0x068 (索引 26): 0x3079ACD0 -> PStrCpy
偏移 0x06C (索引 27): 0x3079ACF0 -> PStrNCpy
偏移 0x070 (索引 28): 0x3079AD90 -> PStrCaseCmp
偏移 0x074 (索引 29): 0x3079AE10 -> PPStrCaseCmp
偏移 0x078 (索引 30): 0x3079B070 -> PToCStr
偏移 0x07C (索引 31): 0x3079B0B0 -> CToPStr
偏移 0x084 (索引 33): 0x307AE280 -> LToPStr
偏移 0x088 (索引 34): 0x307ADF50 -> PToLStr
偏移 0x094 (索引 37): 0x307B93D0 -> QSort
偏移 0x098 (索引 38): 0x307A9210 -> FPrintf
偏移 0x0A0 (索引 40): 0x30798E20 -> SPrintf
偏移 0x0A4 (索引 41): 0x30798E60 -> SPrintfp
偏移 0x0A8 (索引 42): 0x3079B200 -> PPrintf
偏移 0x0AC (索引 43): 0x3079B240 -> PPrintfp
偏移 0x0F8 (索引 62): 0x30799030 -> ConvertNum
偏移 0x104 (索引 65): 0x30798D80 -> HexChar
偏移 0x108 (索引 66): 0x307B93F0 -> BinSearch
偏移 0x114 (索引 69): 0x307B8A20 -> Pin
偏移 0x178 (索引 94): 0x307C17B0 -> RandomGen
偏移 0x180 (索引 96): 0x30797440 -> MilliSecs
偏移 0x184 (索引 97): 0x30837780 -> TimeInSecs
偏移 0x188 (索引 98): 0x30838050 -> DateCString
偏移 0x18C (索引 99): 0x30838090 -> TimeCString
偏移 0x190 (索引 100): 0x308380B0 -> ASCIITime
偏移 0x194 (索引 101): 0x30837A60 -> SecsToDate
偏移 0x198 (索引 102): 0x30837AD0 -> DateToSecs
偏移 0x19C (索引 103): 0x307ADB80 -> LStrCmp
偏移 0x1A4 (索引 105): 0x308387E0 -> TToStd
偏移 0x1A8 (索引 106): 0x308387E0 -> TToStd
偏移 0x420 (索引 264): 0x30860E40 -> TrackSBarEvent
偏移 0x424 (索引 265): 0x30860D50 -> TrackSBar
偏移 0x428 (索引 266): 0x30860A40 -> DrawSBar
偏移 0x42C (索引 267): 0x3078E500 -> AZDisposeHandle
偏移 0x430 (索引 268): 0x3078D810 -> AZDisposePtr
偏移 0x434 (索引 269): 0x3078E510 -> AZGetHandleSize
偏移 0x43C (索引 271): 0x3078F100 -> DSHandToHand
偏移 0x440 (索引 272): 0x3078DB20 -> AZHUnlock
偏移 0x444 (索引 273): 0x3078DB20 -> AZHUnlock
偏移 0x450 (索引 276): 0x3078DB90 -> AZHPurge
偏移 0x454 (索引 277): 0x3078DC40 -> AZHNoPurge
偏移 0x458 (索引 278): 0x3078F0E0 -> AZNewHandle
偏移 0x45C (索引 279): 0x3078F0F0 -> AZNewHClr
偏移 0x460 (索引 280): 0x3078D820 -> AZNewPtr
偏移 0x464 (索引 281): 0x30732B40 -> AZNewPClr
偏移 0x474 (索引 285): 0x3078D830 -> AZRecoverHandle
偏移 0x478 (索引 286): 0x3078E520 -> AZSetHandleSize
偏移 0x47C (索引 287): 0x3078E530 -> AZSetHSzClr
偏移 0x48C (索引 291): 0x3078D840 -> DSHeapCheck
偏移 0x490 (索引 292): 0x3078DCF0 -> AZCheckHandle
偏移 0x494 (索引 293): 0x3078D5C0 -> DSCheckPtr
偏移 0x49C (索引 295): 0x3078D420 -> DSDisposePtr
偏移 0x4A4 (索引 297): 0x3078D490 -> DSNewPtr
偏移 0x4A8 (索引 298): 0x3078D940 -> DSNewPClr
偏移 0x4B8 (索引 302): 0x3078D560 -> DSRecoverHandle
我将不断补充搜索到的讯息。