首页
社区
课程
招聘
[旧帖] [求助]怎么算com文件中函数的偏移量 0.00雪花
发表于: 2009-5-9 23:46 4035

[旧帖] [求助]怎么算com文件中函数的偏移量 0.00雪花

2009-5-9 23:46
4035
调用CoCreateInstance后得到了一个DLL(COM)的接口地址.
那然后比如我想调用里面的"speak".
怎么算接口表里函数的偏移?
下面是用eXeScope打开这个DLL的部分内容
Interface ISpVoice; // ISpVoice Interface
GUID={6C44DF74-72B9-4992-A1EC-EF996E0422D4};
  function SetOutput(pUnkOutput:IUnknown; fAllowFormatChanges:I4): HResult;
  function GetOutputObjectToken(out ppObjectToken:^^ISpObjectToken): HResult;
  function GetOutputStream(out ppStream:^^ISpStreamFormat): HResult;
  function Pause: HResult;
  function Resume: HResult;
  function SetVoice(pToken:^ISpObjectToken): HResult;
  function GetVoice(out ppToken:^^ISpObjectToken): HResult;
  function Speak(pwcs:LPWSTR; dwFlags:UI4; out pulStreamNumber:^UI4): HResult;
  function SpeakStream(pStream:^IStream; dwFlags:UI4; out pulStreamNumber:^UI4): HResult;
  function GetStatus(out pStatus:^SPVOICESTATUS; out ppszLastBookmark:^LPWSTR): HResult;
  function Skip(pItemType:LPWSTR; lNumItems:I4; out pulNumSkipped:^UI4): HResult;
  function SetPriority(ePriority:SPVPRIORITY): HResult;
  function GetPriority(out pePriority:^SPVPRIORITY): HResult;
  function SetAlertBoundary(eBoundary:SPEVENTENUM): HResult;
  function GetAlertBoundary(out peBoundary:^SPEVENTENUM): HResult;
  function SetRate(RateAdjust:I4): HResult;
  function GetRate(out pRateAdjust:^I4): HResult;
  function SetVolume(usVolume:UI2): HResult;
  function GetVolume(out pusVolume:^UI2): HResult;
  function WaitUntilDone(msTimeout:UI4): HResult;
  function SetSyncSpeakTimeout(msTimeout:UI4): HResult;
  function GetSyncSpeakTimeout(out pmsTimeout:^UI4): HResult;
  function SpeakCompleteEvent: ^void;
  function IsUISupported(pszTypeOfUI:^UI2; pvExtraData:^void; cbExtraData:UI4; out pfSupported:^I4): HResult;
  function DisplayUI(hWndParent:wireHWND; pszTitle:^UI2; pszTypeOfUI:^UI2; pvExtraData:^void; cbExtraData:UI4): HResult;

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 623
活跃值: (10)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
2
快雪时晴 曾经说过
ComTrace
COMView
COMRaider
..........................
plz add more
2009-5-10 01:34
0
雪    币: 210
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
Thank 阿CR,COMView很强大,但我还是算不对
这是在网上找的别人的代码,他调用的是Speak:
.data
CLSID_SpVoice GUID <096749377h, 03391h, 011D2h, <09Eh, 0E3h, 000h, 0C0h, 04Fh, 079h, 073h, 096h>>
IID_ISpVoice  GUID <06C44DF74h, 072B9h, 04992h, <0A1h, 0ECh, 0EFh, 099h, 06Eh, 004h, 022h, 0D4h>>

TEXT    db 'I',0,' ',0 ,'L',0 ,'o',0 ,'v',0 ,'e',0 ,' ',0 ,'Y',0 ,'o',0 ,'u',0 ,'!',0,0

.data?
PCOM    dd ?
.code

; ---------------------------------------------------------------------------

start:
    invoke CoInitialize,0
    invoke CoCreateInstance,offset CLSID_SpVoice, 0, CLSCTX_INPROC_SERVER, offset IID_ISpVoice,offset PCOM
    .if eax == 0
        push 0
        push 0
        push offset TEXT
        mov eax,PCOM
        push eax
        mov eax,[eax]
        call DWORD PTR[eax+50h] ;PCOM->Speak(L"I LOVE YOU!", 0, 0);
    .endif
    invoke ExitProcess,eax

end start
2009-5-10 11:28
0
游客
登录 | 注册 方可回帖
返回
//