Api Loader 中的声明为:
Private Declare Function StartService Lib "advapi32.dll" Alias "StartServiceA" (ByVal hService As Long, ByVal dwNumServiceArgs As Long, ByVal lpServiceArgVectors As Long) As Long
如果第二个参数 dwNumServiceArgs 不为 0 ,则表示 有附加参数 ,附加参数 在第三个参数 lpServiceArgVectors 指向的地址
假如参数为 ABCD ,如果直接按下面的操作:
Dim sArgs As String
sArgs = "ABCD"
r = StartService(ser, 1, StrPtr(sArgs))
在调试运行状态下,运行没问题,对应的服务也能正常启动,但是编译后运行程序会崩溃
后来,通过调试器 x64dbg 查看正常程序的调用参数,修改代码如下,程序可以正常运行不会崩溃
Dim sArgs As String, pStr As Long
sArgs = "ABCD"
pStr = StrPtr(sArgs)
‘r = StartService(ser, 1, StrPtr(sArgs))
r = StartService(ser, 1, VarPtr(pStr))
这可能就是指针的指针了