<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/">
	<channel>
		<title>Invaluable programming technology - All Forums</title>
		<link>http://www.kbasm.com/forum/</link>
		<description>Invaluable programming technology - http://www.kbasm.com/forum</description>
		<pubDate>Fri, 30 Jul 2010 09:05:15 -0500</pubDate>
		<generator>MyBB</generator>
		<item>
			<title>AccessViolation in module DenomoRuntime.dll</title>
			<link>http://www.kbasm.com/forum/showthread.php?tid=20</link>
			<pubDate>Mon, 04 Jan 2010 18:07:21 -0600</pubDate>
			<guid isPermaLink="false">http://www.kbasm.com/forum/showthread.php?tid=20</guid>
			<description><![CDATA[Hi, I am using Delphi 2009
manage to compile using all your instructions, thank you
but on a Run start I have AccessViolation in module DenomoRuntime.dll error.
Please help, not sure what is wrong?]]></description>
			<content:encoded><![CDATA[Hi, I am using Delphi 2009
manage to compile using all your instructions, thank you
but on a Run start I have AccessViolation in module DenomoRuntime.dll error.
Please help, not sure what is wrong?]]></content:encoded>
		</item>
		<item>
			<title>Understanding how hooks work ?</title>
			<link>http://www.kbasm.com/forum/showthread.php?tid=19</link>
			<pubDate>Sat, 08 Aug 2009 14:51:47 -0500</pubDate>
			<guid isPermaLink="false">http://www.kbasm.com/forum/showthread.php?tid=19</guid>
			<description><![CDATA[Hi, tryed to get a hook up and running but failed, so now i got interested in how it actaly works hehe.

I looked through the codehook source etc. but found that it was pretty hard to figure out how the hook was set, so i wanted to try and make a "simple" sample.

Looking around the web, and translating some c++ code (c++ not my strong side).

Anyways this is what i came up with, not getting any errors but the hook dose not work.


Code:
Type
  TJMPCode = array[0..6] of Byte;

  TApiHookStruct = record
    ApiModuleName : PCHAR;
    ApiName       : PCHAR;
    ApiProc       : Pointer;
    ApiFiveByte   : TJMPCode;
    HookProc      : Pointer;
    HookFiveByte  : TJMPCode;
  End;

Const ZeroJMPCode : TJMPCode = (0, 0, 0, 0, 0, 0, 0);

var  gHook : TApiHookStruct;

procedure MakeJMPCode(Var lpJMPCode : TJMPCode; lpCodePoint : pointer);
Var
    temp : byte;
    wHiWord : WORD;
    wLoWord : WORD;
    wCS : WORD;
Begin
    wHiWord := HIWORD( DWORD(lpCodePoint) );
    wLoWord := LOWORD( DWORD(lpCodePoint) );

    asm
      push eax;
      push cs;
      pop  eax;
      mov  wCS, ax;
      pop  eax;
    end;

    lpJMPCode[0] := $ea;

    temp := LOBYTE(wLoWord);
    lpJMPCode[1] := temp;
    temp := HIBYTE(wLoWord);
    lpJMPCode[2] := temp;
    temp := LOBYTE(wHiWord);
    lpJMPCode[3] := temp;
    temp := HIBYTE(wHiWord);
    lpJMPCode[4] := temp;
    temp := LOBYTE(wCS);
    lpJMPCode[5] := temp;
    temp := HIBYTE(wCS);
    lpJMPCode[6] := temp;
End;

function Hook(Var ApiHook : TApiHookStruct) : boolean;
Var
  dwReserved : DWORD;
  dwTemp     : DWORD;
Begin
  Result := False;

  if not assigned(ApiHook.ApiProc) then
     ApiHook.ApiProc := GetProcAddress(GetModuleHandle(ApiHook.ApiModuleName), ApiHook.ApiName);

  if ApiHook.HookFiveByte[0] = 0 then
     MakeJMPCode(ApiHook.HookFiveByte, ApiHook.HookProc);

  if not VirtualProtect(ApiHook.ApiProc, 16, PAGE_READWRITE, @dwReserved) then exit;

  if IsBadWritePtr(ApiHook.ApiProc, 7) then
  Begin
     VirtualProtect(ApiHook.ApiProc, 16, dwReserved, @dwTemp);
     exit;
  End;

  move(ApiHook.HookFiveByte, ApiHook.ApiProc^, 7);

  if not VirtualProtect(ApiHook.ApiProc, 16, dwReserved, @dwTemp) then exit;

  Result := True;
End;

function UnHook(ApiHook : TApiHookStruct) : boolean;
Var
  dwReserved : DWORD;
  dwTemp     : DWORD;
Begin
  Result := False;

  if not assigned(ApiHook.ApiProc) then exit;

  if not VirtualProtect(ApiHook.ApiProc, 16, PAGE_READWRITE, @dwReserved) then exit;

  if IsBadWritePtr(ApiHook.ApiProc, 7) then
  Begin
     VirtualProtect(ApiHook.ApiProc, 16, dwReserved, @dwTemp);
     exit;
  End;

  move(ApiHook.ApiFiveByte, ApiHook.ApiProc^, 7);

  if not VirtualProtect(ApiHook.ApiProc, 16, dwReserved, @dwTemp) then exit;

  Result := True;
End;

procedure HookProc;
begin
&nbsp;&nbsp;gHook.ApiModuleName := 'DInput8.dll';
&nbsp;&nbsp;gHook.ApiName := 'DirectInput8Create';
&nbsp;&nbsp;gHook.ApiProc := nil;
&nbsp;&nbsp;gHook.ApiFiveByte := ZeroJMPCode;
&nbsp;&nbsp;gHook.HookProc := @NewDirectInput8Create;
&nbsp;&nbsp;gHook.HookFiveByte := ZeroJMPCode;
&nbsp;&nbsp;Hook(gHook);
end;

procedure UnhookProc;
begin
&nbsp;&nbsp;UnHook(gHook);
end;


Trying to figure out the "magic" behind CodeHook :)]]></description>
			<content:encoded><![CDATA[Hi, tryed to get a hook up and running but failed, so now i got interested in how it actaly works hehe.

I looked through the codehook source etc. but found that it was pretty hard to figure out how the hook was set, so i wanted to try and make a "simple" sample.

Looking around the web, and translating some c++ code (c++ not my strong side).

Anyways this is what i came up with, not getting any errors but the hook dose not work.


Code:
Type
  TJMPCode = array[0..6] of Byte;

  TApiHookStruct = record
    ApiModuleName : PCHAR;
    ApiName       : PCHAR;
    ApiProc       : Pointer;
    ApiFiveByte   : TJMPCode;
    HookProc      : Pointer;
    HookFiveByte  : TJMPCode;
  End;

Const ZeroJMPCode : TJMPCode = (0, 0, 0, 0, 0, 0, 0);

var  gHook : TApiHookStruct;

procedure MakeJMPCode(Var lpJMPCode : TJMPCode; lpCodePoint : pointer);
Var
    temp : byte;
    wHiWord : WORD;
    wLoWord : WORD;
    wCS : WORD;
Begin
    wHiWord := HIWORD( DWORD(lpCodePoint) );
    wLoWord := LOWORD( DWORD(lpCodePoint) );

    asm
      push eax;
      push cs;
      pop  eax;
      mov  wCS, ax;
      pop  eax;
    end;

    lpJMPCode[0] := $ea;

    temp := LOBYTE(wLoWord);
    lpJMPCode[1] := temp;
    temp := HIBYTE(wLoWord);
    lpJMPCode[2] := temp;
    temp := LOBYTE(wHiWord);
    lpJMPCode[3] := temp;
    temp := HIBYTE(wHiWord);
    lpJMPCode[4] := temp;
    temp := LOBYTE(wCS);
    lpJMPCode[5] := temp;
    temp := HIBYTE(wCS);
    lpJMPCode[6] := temp;
End;

function Hook(Var ApiHook : TApiHookStruct) : boolean;
Var
  dwReserved : DWORD;
  dwTemp     : DWORD;
Begin
  Result := False;

  if not assigned(ApiHook.ApiProc) then
     ApiHook.ApiProc := GetProcAddress(GetModuleHandle(ApiHook.ApiModuleName), ApiHook.ApiName);

  if ApiHook.HookFiveByte[0] = 0 then
     MakeJMPCode(ApiHook.HookFiveByte, ApiHook.HookProc);

  if not VirtualProtect(ApiHook.ApiProc, 16, PAGE_READWRITE, @dwReserved) then exit;

  if IsBadWritePtr(ApiHook.ApiProc, 7) then
  Begin
     VirtualProtect(ApiHook.ApiProc, 16, dwReserved, @dwTemp);
     exit;
  End;

  move(ApiHook.HookFiveByte, ApiHook.ApiProc^, 7);

  if not VirtualProtect(ApiHook.ApiProc, 16, dwReserved, @dwTemp) then exit;

  Result := True;
End;

function UnHook(ApiHook : TApiHookStruct) : boolean;
Var
  dwReserved : DWORD;
  dwTemp     : DWORD;
Begin
  Result := False;

  if not assigned(ApiHook.ApiProc) then exit;

  if not VirtualProtect(ApiHook.ApiProc, 16, PAGE_READWRITE, @dwReserved) then exit;

  if IsBadWritePtr(ApiHook.ApiProc, 7) then
  Begin
     VirtualProtect(ApiHook.ApiProc, 16, dwReserved, @dwTemp);
     exit;
  End;

  move(ApiHook.ApiFiveByte, ApiHook.ApiProc^, 7);

  if not VirtualProtect(ApiHook.ApiProc, 16, dwReserved, @dwTemp) then exit;

  Result := True;
End;

procedure HookProc;
begin
&nbsp;&nbsp;gHook.ApiModuleName := 'DInput8.dll';
&nbsp;&nbsp;gHook.ApiName := 'DirectInput8Create';
&nbsp;&nbsp;gHook.ApiProc := nil;
&nbsp;&nbsp;gHook.ApiFiveByte := ZeroJMPCode;
&nbsp;&nbsp;gHook.HookProc := @NewDirectInput8Create;
&nbsp;&nbsp;gHook.HookFiveByte := ZeroJMPCode;
&nbsp;&nbsp;Hook(gHook);
end;

procedure UnhookProc;
begin
&nbsp;&nbsp;UnHook(gHook);
end;


Trying to figure out the "magic" behind CodeHook :)]]></content:encoded>
		</item>
		<item>
			<title>VMTOFFSET ?</title>
			<link>http://www.kbasm.com/forum/showthread.php?tid=18</link>
			<pubDate>Thu, 06 Aug 2009 12:38:12 -0500</pubDate>
			<guid isPermaLink="false">http://www.kbasm.com/forum/showthread.php?tid=18</guid>
			<description><![CDATA[is VMTOFFSET not aviaible in Delphi 5 ?

Also had to make these changes to make it compile in D5:

type
  PCardinal = ^Cardinal;
  PPointer = ^Pointer;
  IInterface = IUnknown;]]></description>
			<content:encoded><![CDATA[is VMTOFFSET not aviaible in Delphi 5 ?

Also had to make these changes to make it compile in D5:

type
  PCardinal = ^Cardinal;
  PPointer = ^Pointer;
  IInterface = IUnknown;]]></content:encoded>
		</item>
		<item>
			<title>Hooking target object method</title>
			<link>http://www.kbasm.com/forum/showthread.php?tid=17</link>
			<pubDate>Thu, 06 Aug 2009 10:12:59 -0500</pubDate>
			<guid isPermaLink="false">http://www.kbasm.com/forum/showthread.php?tid=17</guid>
			<description><![CDATA[Hi Qi,

First of all, good job on the code hooking library. 

This is the function that i want to monitor.

Function       : static, [000AAFB0][0001:000A9FB0], len = 0000004E, public: virtual __thiscall CTraceAttackState::~CTraceAttackState(void)
                 Function attribute:
                 Function info:
FuncDebugStart :   static, [000AAFC9][0001:000A9FC9]
FuncDebugEnd   :   static, [000AAFEF][0001:000A9FEF]
Data           :   enregistered edx, Object Ptr, Type: class CTraceAttackState * const, this


I have successfully inject my dll into the target process and hooking to global functions are working well. This is what i have done. However, when i tried to hook to this object method, the target process crashed whenever it runs this method. This is what i do.

  GCodeHookHelper.SetCallingConvention(HCC_CDECL, HCC_REGISTER);
  GCodeHookHelper.HookWithObjectMethod(nil, Self, pointer(TargetAddr), AHook, 0, 0);

The Target Object is stored in the register edx (as per the description above). Kindly advise.]]></description>
			<content:encoded><![CDATA[Hi Qi,

First of all, good job on the code hooking library. 

This is the function that i want to monitor.

Function       : static, [000AAFB0][0001:000A9FB0], len = 0000004E, public: virtual __thiscall CTraceAttackState::~CTraceAttackState(void)
                 Function attribute:
                 Function info:
FuncDebugStart :   static, [000AAFC9][0001:000A9FC9]
FuncDebugEnd   :   static, [000AAFEF][0001:000A9FEF]
Data           :   enregistered edx, Object Ptr, Type: class CTraceAttackState * const, this


I have successfully inject my dll into the target process and hooking to global functions are working well. This is what i have done. However, when i tried to hook to this object method, the target process crashed whenever it runs this method. This is what i do.

  GCodeHookHelper.SetCallingConvention(HCC_CDECL, HCC_REGISTER);
  GCodeHookHelper.HookWithObjectMethod(nil, Self, pointer(TargetAddr), AHook, 0, 0);

The Target Object is stored in the register edx (as per the description above). Kindly advise.]]></content:encoded>
		</item>
		<item>
			<title>Ideas on how to solve memory leak</title>
			<link>http://www.kbasm.com/forum/showthread.php?tid=16</link>
			<pubDate>Mon, 27 Apr 2009 14:49:42 -0500</pubDate>
			<guid isPermaLink="false">http://www.kbasm.com/forum/showthread.php?tid=16</guid>
			<description><![CDATA[Hello,

I just installed DENOMO and got a trace of several (potential) memory leaks in my multithreaded Indy9-based UDP server application.  However, I haven't been able to figure out how to go about fixing them.  Several of them seem to be in other units, so not much I can do about those, I guess.  Since this server is supposed to run non-stop, memory leaks are a big deal.  Any ideas?  I am pasting some of the lines in the log as well as relevant code...

Checking final leak at Viernes, 24 de Abril de 2009 05:23:57 p.m.
00E74674  BlockSize: 20 Class: TObjectList
    ST: 004471B6 [HelpIntfs] [THelpManager.Create] [295]
    ST: 004470BD [HelpIntfs] [GetHelpSystem] [274]
    ST: 004812F2 [Forms] [TApplication.ValidateHelpSystem] [7111]
    ST: 0047EECE [Forms] [TApplication.Create] [6116]
    ST: 00467163 [Controls] [InitControls] [10708]
    ST: 004672C0 [Controls] [initialization] [10728]
    ST: 004047B4 [System] [InitUnits] [10537]
    ST: 0040481B [System] [@StartExe] [10614]
    ST: 7C816FE7 [] [Unknown function at RegisterWaitForInputIdle] []

(Not sure I can do much about this.  There are several THelpManager leaks just like this)

00E9E8BC  BlockSize: 164 Class: TReportInfo
    ST: 004F2B26 [main] [TfrmServer.ProcessPackage] [2854]
    ST: 004EC169 [main] [TUdpThread.Execute] [1326]
    ST: 00438EE7 [Classes] [ThreadProc] [9010]
    ST: 00404AD6 [System] [ThreadWrapper] [11221]
    ST: 7C80B699 [] [Unknown function at GetModuleFileNameA] []

(Now, this is likely to be a big deal.  However, I can't figure out why this happens... this is the code...

  DataTable:=TReportInfo.Create; //line 2854
  Count:=length(data);
  if( count> 0)then
  begin
         //do actual processing of DataTable object.  No exit's or exceptions inside
  end;
  DataTable.Free;

so, I don't know how the memory is getting leaked)

00EA5BDC  BlockSize: 24 Class: TIconImage
    ST: 004457D5 [Graphics] [TIcon.SetHandle] [6616]
    ST: 00469FE2 [ImgList] [TCustomImageList.GetIcon] [472]
    ST: 00469F87 [ImgList] [TCustomImageList.GetIcon] [464]
    ST: 004F4EFA [main] [TfrmServer.SetIcons] [3228]
    ST: 004F1825 [main] [TfrmServer.tmrHeartbeatTimer] [2579]
    ST: 0044F8C6 [ExtCtrls] [TTimer.Timer] [1621]
    ST: 0044F734 [ExtCtrls] [TTimer.WndProc] [1578]
    ST: 0043AAAE [Classes] [StdWndProc] [10566]
    ST: 7E398734 [] [Unknown function at GetDC] []
    ST: 7E398816 [] [Unknown function at GetDC] []

(The troublesome thing about this is that it is happening inside the GetIcon, which I have no control over.  I am pasting the SetIcons code.  This is getting called every minute to update the taskbar icon with the state of the server, so leaks here escalate...

          while ilTray.Count>1 do
                ilTray.Delete(1);
          if icoOff then
          begin
               ico:=TIcon.Create;
               ilIcons.GetIcon(0,ico);
               ico:=CombineIcons(ico.Handle,application.Icon.Handle);
               ilTray.AddIcon(ico);
          end;
          if icoRed then
          begin
               ico:=TIcon.Create; (*!*)
               ilIcons.GetIcon(1,ico); (*!*)
               ico:=CombineIcons(ico.Handle,application.Icon.Handle);
               ilTray.AddIcon(ico);
          end;
          if icoYel then
          begin
               ico:=TIcon.Create;
               ilIcons.GetIcon(2,ico);
               ico:=CombineIcons(ico.Handle,application.Icon.Handle);
               ilTray.AddIcon(ico);
          end;
          TrayIcon.IconIndex:=0;
          TrayIcon.CycleIcons:=ilTray.Count>1;

)

(And, finally, not sure what this means exactly... 14 blocks?, eliminated leaks on 225 blocks? What does the count represent? How is this different from what is found before?)

Totally output 14 blocks 0 handles in 0 seconds.
Eliminated leaks on same calling path of 225 blocks.
The most places blocks on same calling path occurs in:
Same count: 224
    ST: 004F2B26 [main] [TfrmServer.ProcessPackage] [2854]
    ST: 004EC169 [main] [TUdpThread.Execute] [1326]
    ST: 00438EE7 [Classes] [ThreadProc] [9010]
    ST: 00404AD6 [System] [ThreadWrapper] [11221]
    ST: 7C80B699 [] [Unknown function at GetModuleFileNameA] []
Same count: 1
    ST: 0044F8C6 [ExtCtrls] [TTimer.Timer] [1621]
    ST: 0044F734 [ExtCtrls] [TTimer.WndProc] [1578]
    ST: 0043AAAE [Classes] [StdWndProc] [10566]
    ST: 7E398734 [] [Unknown function at GetDC] []
    ST: 7E398816 [] [Unknown function at GetDC] []
    ST: 7E3989CD [] [Unknown function at GetWindowLongW] []
    ST: 7E3996C7 [] [DispatchMessageA] []
    ST: 004804BD [Forms] [TApplication.ProcessMessage] [6696]
    ST: 00480504 [Forms] [TApplication.HandleMessage] [6715]
    ST: 0048079F [Forms] [TApplication.Run] [6799]
Leaks found on program exit. Totallly 14 blocks 0 handles.

OK, hope someone can give me an idea on how to deal with this...

Thanks,

Arturo]]></description>
			<content:encoded><![CDATA[Hello,

I just installed DENOMO and got a trace of several (potential) memory leaks in my multithreaded Indy9-based UDP server application.  However, I haven't been able to figure out how to go about fixing them.  Several of them seem to be in other units, so not much I can do about those, I guess.  Since this server is supposed to run non-stop, memory leaks are a big deal.  Any ideas?  I am pasting some of the lines in the log as well as relevant code...

Checking final leak at Viernes, 24 de Abril de 2009 05:23:57 p.m.
00E74674  BlockSize: 20 Class: TObjectList
    ST: 004471B6 [HelpIntfs] [THelpManager.Create] [295]
    ST: 004470BD [HelpIntfs] [GetHelpSystem] [274]
    ST: 004812F2 [Forms] [TApplication.ValidateHelpSystem] [7111]
    ST: 0047EECE [Forms] [TApplication.Create] [6116]
    ST: 00467163 [Controls] [InitControls] [10708]
    ST: 004672C0 [Controls] [initialization] [10728]
    ST: 004047B4 [System] [InitUnits] [10537]
    ST: 0040481B [System] [@StartExe] [10614]
    ST: 7C816FE7 [] [Unknown function at RegisterWaitForInputIdle] []

(Not sure I can do much about this.  There are several THelpManager leaks just like this)

00E9E8BC  BlockSize: 164 Class: TReportInfo
    ST: 004F2B26 [main] [TfrmServer.ProcessPackage] [2854]
    ST: 004EC169 [main] [TUdpThread.Execute] [1326]
    ST: 00438EE7 [Classes] [ThreadProc] [9010]
    ST: 00404AD6 [System] [ThreadWrapper] [11221]
    ST: 7C80B699 [] [Unknown function at GetModuleFileNameA] []

(Now, this is likely to be a big deal.  However, I can't figure out why this happens... this is the code...

  DataTable:=TReportInfo.Create; //line 2854
  Count:=length(data);
  if( count> 0)then
  begin
         //do actual processing of DataTable object.  No exit's or exceptions inside
  end;
  DataTable.Free;

so, I don't know how the memory is getting leaked)

00EA5BDC  BlockSize: 24 Class: TIconImage
    ST: 004457D5 [Graphics] [TIcon.SetHandle] [6616]
    ST: 00469FE2 [ImgList] [TCustomImageList.GetIcon] [472]
    ST: 00469F87 [ImgList] [TCustomImageList.GetIcon] [464]
    ST: 004F4EFA [main] [TfrmServer.SetIcons] [3228]
    ST: 004F1825 [main] [TfrmServer.tmrHeartbeatTimer] [2579]
    ST: 0044F8C6 [ExtCtrls] [TTimer.Timer] [1621]
    ST: 0044F734 [ExtCtrls] [TTimer.WndProc] [1578]
    ST: 0043AAAE [Classes] [StdWndProc] [10566]
    ST: 7E398734 [] [Unknown function at GetDC] []
    ST: 7E398816 [] [Unknown function at GetDC] []

(The troublesome thing about this is that it is happening inside the GetIcon, which I have no control over.  I am pasting the SetIcons code.  This is getting called every minute to update the taskbar icon with the state of the server, so leaks here escalate...

          while ilTray.Count>1 do
                ilTray.Delete(1);
          if icoOff then
          begin
               ico:=TIcon.Create;
               ilIcons.GetIcon(0,ico);
               ico:=CombineIcons(ico.Handle,application.Icon.Handle);
               ilTray.AddIcon(ico);
          end;
          if icoRed then
          begin
               ico:=TIcon.Create; (*!*)
               ilIcons.GetIcon(1,ico); (*!*)
               ico:=CombineIcons(ico.Handle,application.Icon.Handle);
               ilTray.AddIcon(ico);
          end;
          if icoYel then
          begin
               ico:=TIcon.Create;
               ilIcons.GetIcon(2,ico);
               ico:=CombineIcons(ico.Handle,application.Icon.Handle);
               ilTray.AddIcon(ico);
          end;
          TrayIcon.IconIndex:=0;
          TrayIcon.CycleIcons:=ilTray.Count>1;

)

(And, finally, not sure what this means exactly... 14 blocks?, eliminated leaks on 225 blocks? What does the count represent? How is this different from what is found before?)

Totally output 14 blocks 0 handles in 0 seconds.
Eliminated leaks on same calling path of 225 blocks.
The most places blocks on same calling path occurs in:
Same count: 224
    ST: 004F2B26 [main] [TfrmServer.ProcessPackage] [2854]
    ST: 004EC169 [main] [TUdpThread.Execute] [1326]
    ST: 00438EE7 [Classes] [ThreadProc] [9010]
    ST: 00404AD6 [System] [ThreadWrapper] [11221]
    ST: 7C80B699 [] [Unknown function at GetModuleFileNameA] []
Same count: 1
    ST: 0044F8C6 [ExtCtrls] [TTimer.Timer] [1621]
    ST: 0044F734 [ExtCtrls] [TTimer.WndProc] [1578]
    ST: 0043AAAE [Classes] [StdWndProc] [10566]
    ST: 7E398734 [] [Unknown function at GetDC] []
    ST: 7E398816 [] [Unknown function at GetDC] []
    ST: 7E3989CD [] [Unknown function at GetWindowLongW] []
    ST: 7E3996C7 [] [DispatchMessageA] []
    ST: 004804BD [Forms] [TApplication.ProcessMessage] [6696]
    ST: 00480504 [Forms] [TApplication.HandleMessage] [6715]
    ST: 0048079F [Forms] [TApplication.Run] [6799]
Leaks found on program exit. Totallly 14 blocks 0 handles.

OK, hope someone can give me an idea on how to deal with this...

Thanks,

Arturo]]></content:encoded>
		</item>
		<item>
			<title>hook createprocess&nbsp;&nbsp;- system wide</title>
			<link>http://www.kbasm.com/forum/showthread.php?tid=15</link>
			<pubDate>Thu, 26 Mar 2009 16:46:40 -0500</pubDate>
			<guid isPermaLink="false">http://www.kbasm.com/forum/showthread.php?tid=15</guid>
			<description><![CDATA[Hello,

can I hook createprocess  ?? could you write me any examples??
I don't know I can use this CodeHook.

Thank's a lot.]]></description>
			<content:encoded><![CDATA[Hello,

can I hook createprocess  ?? could you write me any examples??
I don't know I can use this CodeHook.

Thank's a lot.]]></content:encoded>
		</item>
		<item>
			<title>Need help with using DENOMO with my app</title>
			<link>http://www.kbasm.com/forum/showthread.php?tid=14</link>
			<pubDate>Thu, 29 Jan 2009 14:22:37 -0600</pubDate>
			<guid isPermaLink="false">http://www.kbasm.com/forum/showthread.php?tid=14</guid>
			<description><![CDATA[I'm developing application which suppose to run 24/7. It's multithreaded and includes connection to database (Sybase ASA via NativeDB drivers) and printing reports (Rave report 7.0.5 BEX). It works perfectly except that memory gets consumed more and more with every report generation. It looks like rave components do not release memory after report gets generated. I’ve tried with MemCheck but it presents Memory leak information upon application termination and it’s cumulative. Yesterday I came across DENOMO and I liked the idea of “session” search for memory leaks. I’ve downloaded it from your Web page, installed and included in my app – but it crashes application every time I start it. Where did I go wrong with DENOMO installation procedure?]]></description>
			<content:encoded><![CDATA[I'm developing application which suppose to run 24/7. It's multithreaded and includes connection to database (Sybase ASA via NativeDB drivers) and printing reports (Rave report 7.0.5 BEX). It works perfectly except that memory gets consumed more and more with every report generation. It looks like rave components do not release memory after report gets generated. I’ve tried with MemCheck but it presents Memory leak information upon application termination and it’s cumulative. Yesterday I came across DENOMO and I liked the idea of “session” search for memory leaks. I’ve downloaded it from your Web page, installed and included in my app – but it crashes application every time I start it. Where did I go wrong with DENOMO installation procedure?]]></content:encoded>
		</item>
		<item>
			<title>Denomo with COM server</title>
			<link>http://www.kbasm.com/forum/showthread.php?tid=13</link>
			<pubDate>Mon, 08 Dec 2008 09:18:26 -0600</pubDate>
			<guid isPermaLink="false">http://www.kbasm.com/forum/showthread.php?tid=13</guid>
			<description><![CDATA[I'm debugging an Automation server I wrote with Delphi. I've been able to debug with Delphi breakpoints and other tools just fine.

I added Denomo and rebuilt, started the Inspector, started my automation client (perl with Win32::OLE), and created a COM object from my server. The Inspector's buttons did not enable to allow me to start logging.

Any hints on looking for leaks from a COM server?

Thanks in advance
Kirk]]></description>
			<content:encoded><![CDATA[I'm debugging an Automation server I wrote with Delphi. I've been able to debug with Delphi breakpoints and other tools just fine.

I added Denomo and rebuilt, started the Inspector, started my automation client (perl with Win32::OLE), and created a COM object from my server. The Inspector's buttons did not enable to allow me to start logging.

Any hints on looking for leaks from a COM server?

Thanks in advance
Kirk]]></content:encoded>
		</item>
		<item>
			<title>Unresolved external?</title>
			<link>http://www.kbasm.com/forum/showthread.php?tid=12</link>
			<pubDate>Thu, 20 Nov 2008 04:32:15 -0600</pubDate>
			<guid isPermaLink="false">http://www.kbasm.com/forum/showthread.php?tid=12</guid>
			<description><![CDATA[Hello Qi,

I have downloaded your new DenomoCPP months ago and been using it without problem in new projects.

However this day I attempt to use Denomo to debug an old (and with many pretty large cpp files) project, the executable cannot be built.  The BCB complains that both '__mize' and '__expand' are unresolvable external symbols.  I am sure that the library path is correct as moving the DenomoCPP_BC.lib to somewhere else 'GetCPPService' is also unresolveable.  Putting the lib in the correct place can get the 'GetCPPService' resolved, but not the '__msize' and '__expand'.

I counterchecked the setting with a working project and cannot find any differences.

Am I missing something?  Please kindly advise.

I am using BCB6 with WinXP Pro SP3.


Thanks and regards,
Patrick
]]></description>
			<content:encoded><![CDATA[Hello Qi,

I have downloaded your new DenomoCPP months ago and been using it without problem in new projects.

However this day I attempt to use Denomo to debug an old (and with many pretty large cpp files) project, the executable cannot be built.  The BCB complains that both '__mize' and '__expand' are unresolvable external symbols.  I am sure that the library path is correct as moving the DenomoCPP_BC.lib to somewhere else 'GetCPPService' is also unresolveable.  Putting the lib in the correct place can get the 'GetCPPService' resolved, but not the '__msize' and '__expand'.

I counterchecked the setting with a working project and cannot find any differences.

Am I missing something?  Please kindly advise.

I am using BCB6 with WinXP Pro SP3.


Thanks and regards,
Patrick
]]></content:encoded>
		</item>
		<item>
			<title>Unable to use Debug DCUs</title>
			<link>http://www.kbasm.com/forum/showthread.php?tid=11</link>
			<pubDate>Thu, 21 Aug 2008 14:47:57 -0500</pubDate>
			<guid isPermaLink="false">http://www.kbasm.com/forum/showthread.php?tid=11</guid>
			<description><![CDATA[Hey there Qi,

I stumbled upon this site and decided to give your leak detector a try.  It looks like a very sweet tool.  Unfortunately, I'm having some trouble with it.  

My Delphi project is unable to compile when I check off the 'Include Debug DCUs' option.  I receive countless errors similar to the following:

[Fatal Error] Unit1.pas(11): Unit XXX was compiled with a different version of YYY.YYY

I'm assuming that Denomo relies on these DCUs, because when I run my app and then run LeakInspector, all of the buttons are greyed out and I am unable to begin a session.

Do you have any ideas on what I could do differently to make this work?  I'd really like to give your product a good test.

Thanks for your help,

~DJ]]></description>
			<content:encoded><![CDATA[Hey there Qi,

I stumbled upon this site and decided to give your leak detector a try.  It looks like a very sweet tool.  Unfortunately, I'm having some trouble with it.  

My Delphi project is unable to compile when I check off the 'Include Debug DCUs' option.  I receive countless errors similar to the following:

[Fatal Error] Unit1.pas(11): Unit XXX was compiled with a different version of YYY.YYY

I'm assuming that Denomo relies on these DCUs, because when I run my app and then run LeakInspector, all of the buttons are greyed out and I am unable to begin a session.

Do you have any ideas on what I could do differently to make this work?  I'd really like to give your product a good test.

Thanks for your help,

~DJ]]></content:encoded>
		</item>
		<item>
			<title>Cant find leak</title>
			<link>http://www.kbasm.com/forum/showthread.php?tid=10</link>
			<pubDate>Fri, 01 Aug 2008 05:08:08 -0500</pubDate>
			<guid isPermaLink="false">http://www.kbasm.com/forum/showthread.php?tid=10</guid>
			<description><![CDATA[Hi -
Thanks for this software - I think it will prove very popular!
I dont know enough about XP to investigate the problem I have 
- however this is a short explanation:

Im using Delphi7 and XP prof.

Im loading a panel on my app. with objects from disk (child panels, labels etc) and I get a continuous leak when the program runs. I'm swapping the contents of the panel from disk quite often using readcomponent from a Tfilestream. Before I load the panel I clear it as follows:

 for x:=(panel1.ControlCount-1) downto 0  do
  panel1.controls[x].free;

I then start Denomo, (leak begin) switch panels a few times and finish on the same one then (leak end) I dont really understand the output below.

EF0A0E13 GDI object -- Font
Allocator function: CreateFontIndirectA
(I presume this is one of the causes of the leak)

Totally output 9 blocks 3 handles in 0 seconds.
Eliminated derived object's fields leak of 33 blocks.
Eliminated leaks on same calling path of 10 blocks.
The most places blocks on same calling path occurs in:
Same count: 3

Can you explain them please? Thanks.

Filters: MemTyps: [Memory blocks], [Objects], [String], [Dynamic array], [GDI objects]    Session ID: 0
Begin incremental session leak dectection at group 1
Filters: MemTyps: [Memory blocks], [Objects], [String], [Dynamic array], [GDI objects]    Session ID: 1
00FA7F98  BlockSize: 16 String: Ref: 1 Len: 6 "clone2"
    ST: 0042FB8C [Classes] [TReader.ReadRootComponent] [6539]
    ST: 0042CE18 [Classes] [TStream.ReadComponent] [4975]
    ST: 004BB57A [sentmain2] [swap_panel] [1039]
    ST: 004BBD6D [sentmain2] [TForm1.AlarmtimerTimer] [1304]
    ST: 00496FE4 [ThdTimer] [TThreadedTimer.DoTimer] [121]
    ST: 00430F40 [Classes] [CheckSynchronize] [9339]
    ST: 0048118C [Forms] [TApplication.WndProc] [6671]
    ST: 00432E46 [Classes] [StdWndProc] [10967]
    ST: 7E418734 [] [Unknown function at GetDC] []
    ST: 7E418816 [] [Unknown function at GetDC] []

01A42980  BlockSize: 12 String: Ref: 1 Len: 3 "t39"
    ST: 0042EBD4 [Classes] [TReader.ReadComponent] [6137]
    ST: 0042EECB [Classes] [TReader.ReadDataInner] [6210]
    ST: 0042EE04 [Classes] [TReader.ReadData] [6190]
    ST: 00431D93 [Classes] [TComponent.ReadState] [9988]
    ST: 00459426 [Controls] [TControl.ReadState] [3358]
    ST: 0045DA1D [Controls] [TWinControl.ReadState] [5475]
    ST: 0042FCC6 [Classes] [TReader.ReadRootComponent] [6567]
    ST: 0042CE18 [Classes] [TStream.ReadComponent] [4975]
    ST: 004BB57A [sentmain2] [swap_panel] [1039]
    ST: 004BBD6D [sentmain2] [TForm1.AlarmtimerTimer] [1304]

01A42A18  BlockSize: 400 Class: TLabel
    ST: 0042EC15 [Classes] [TReader.ReadComponent] [6144]
    ST: 0042EECB [Classes] [TReader.ReadDataInner] [6210]
    ST: 0042EE04 [Classes] [TReader.ReadData] [6190]
    ST: 00431D93 [Classes] [TComponent.ReadState] [9988]
    ST: 00459426 [Controls] [TControl.ReadState] [3358]
    ST: 0045DA1D [Controls] [TWinControl.ReadState] [5475]
    ST: 0042FCC6 [Classes] [TReader.ReadRootComponent] [6567]
    ST: 0042CE18 [Classes] [TStream.ReadComponent] [4975]
    ST: 004BB57A [sentmain2] [swap_panel] [1039]
    ST: 004BBD6D [sentmain2] [TForm1.AlarmtimerTimer] [1304]

01A5EF1C  BlockSize: 13 GETMEM
    ST: 0040A49E [SysUtils] [StrNew] [6410]
    ST: 0045BFD8 [Controls] [TControl.DefaultHandler] [4663]
    ST: 0045BF42 [Controls] [TControl.WndProc] [4646]
    ST: 0045BC4D [Controls] [TControl.Perform] [4553]
    ST: 0045A413 [Controls] [TControl.SetTextBuf] [3795]
    ST: 0045A4B1 [Controls] [TControl.SetText] [3809]
    ST: 00426EE4 [TypInfo] [SetLongStrProp] [1592]
    ST: 0042F906 [Classes] [TReader.ReadPropValue] [6469]
    ST: 0042F4EE [Classes] [TReader.ReadProperty] [6385]
    ST: 0042EE52 [Classes] [TReader.ReadDataInner] [6202]

01A6D658  BlockSize: 60 GETMEM
    ST: 0043487E [Graphics] [TResourceManager.ChangeResource] [1199]
    ST: 0043549A [Graphics] [TFont.SetData] [1522]
    ST: 00435838 [Graphics] [TFont.SetStyle] [1645]
    ST: 00426DF0 [TypInfo] [SetOrdProp] [1253]
    ST: 0042F4EE [Classes] [TReader.ReadProperty] [6385]
    ST: 0042EE52 [Classes] [TReader.ReadDataInner] [6202]
    ST: 0042EE34 [Classes] [TReader.ReadData] [6196]
    ST: 00431D93 [Classes] [TComponent.ReadState] [9988]
    ST: 00459426 [Controls] [TControl.ReadState] [3358]
    ST: 0042ECA8 [Classes] [TReader.ReadComponent] [6157]

01A6EB68  BlockSize: 16 Class: TList
    ST: 0045E69E [Controls] [TWinControl.Insert] [5818]
    ST: 0045E741 [Controls] [TWinControl.InsertControl] [5838]
    ST: 0045A266 [Controls] [TControl.SetParent] [3723]
    ST: 004591B4 [Controls] [TControl.SetParentComponent] [3274]
    ST: 0042EA6C [Classes] [SetCompName] [6112]
    ST: 0042EC5B [Classes] [TReader.ReadComponent] [6150]
    ST: 0042EECB [Classes] [TReader.ReadDataInner] [6210]
    ST: 0042EE04 [Classes] [TReader.ReadData] [6190]
    ST: 00431D93 [Classes] [TComponent.ReadState] [9988]
    ST: 00459426 [Controls] [TControl.ReadState] [3358]

01A6EBB4  BlockSize: 16 GETMEM
    ST: 0042A59D [Classes] [TList.Grow] [2842]
    ST: 0042A32C [Classes] [TList.Add] [2755]
    ST: 004584C2 [Controls] [ListAdd] [2909]
    ST: 0045E69E [Controls] [TWinControl.Insert] [5818]
    ST: 0045E741 [Controls] [TWinControl.InsertControl] [5838]
    ST: 0045A266 [Controls] [TControl.SetParent] [3723]
    ST: 004591B4 [Controls] [TControl.SetParentComponent] [3274]
    ST: 0042EA6C [Classes] [SetCompName] [6112]
    ST: 0042EC5B [Classes] [TReader.ReadComponent] [6150]
    ST: 0042EECB [Classes] [TReader.ReadDataInner] [6210]

01A73150  BlockSize: 552 Class: TPanel
    ST: 0042FB7E [Classes] [TReader.ReadRootComponent] [6538]
    ST: 0042CE18 [Classes] [TStream.ReadComponent] [4975]
    ST: 004BB57A [sentmain2] [swap_panel] [1039]
    ST: 004BBD6D [sentmain2] [TForm1.AlarmtimerTimer] [1304]
    ST: 00496FE4 [ThdTimer] [TThreadedTimer.DoTimer] [121]
    ST: 00430F40 [Classes] [CheckSynchronize] [9339]
    ST: 0048118C [Forms] [TApplication.WndProc] [6671]
    ST: 00432E46 [Classes] [StdWndProc] [10967]
    ST: 7E418734 [] [Unknown function at GetDC] []
    ST: 7E418816 [] [Unknown function at GetDC] []

01A738DC  BlockSize: 32 GETMEM
    ST: 0043487E [Graphics] [TResourceManager.ChangeResource] [1199]
    ST: 00435DDA [Graphics] [TBrush.SetData] [1875]
    ST: 00435E7E [Graphics] [TBrush.SetColor] [1908]
    ST: 00461D07 [Controls] [TWinControl.CMColorChanged] [7328]
    ST: 0045BF42 [Controls] [TControl.WndProc] [4646]
    ST: 0045FB13 [Controls] [TWinControl.WndProc] [6343]
    ST: 0045BC4D [Controls] [TControl.Perform] [4553]
    ST: 0045A714 [Controls] [TControl.SetColor] [3901]
    ST: 00426DF0 [TypInfo] [SetOrdProp] [1253]
    ST: 0042F4EE [Classes] [TReader.ReadProperty] [6385]

EF0A0E13 GDI object -- Font
Allocator function: CreateFontIndirectA
    ST: 00435637 [Graphics] [TFont.GetHandle] [1576]
    ST: 00436BF6 [Graphics] [TCanvas.CreateFont] [2500]
    ST: 00436B68 [Graphics] [TCanvas.RequiredState] [2482]
    ST: 004369F3 [Graphics] [TCanvas.GetHandle] [2430]
    ST: 0044D300 [StdCtrls] [TCustomLabel.DoDrawText] [1469]
    ST: 0044D4EF [StdCtrls] [TCustomLabel.AdjustBounds] [1525]
    ST: 0044D474 [StdCtrls] [TCustomLabel.Loaded] [1508]
    ST: 0042FD03 [Classes] [TReader.ReadRootComponent] [6569]
    ST: 0042CE18 [Classes] [TStream.ReadComponent] [4975]
    ST: 004BB57A [sentmain2] [swap_panel] [1039]
    ST: 004BBD6D [sentmain2] [TForm1.AlarmtimerTimer] [1304]
    ST: 00496FE4 [ThdTimer] [TThreadedTimer.DoTimer] [121]
    ST: 00430F40 [Classes] [CheckSynchronize] [9339]
    ST: 0048118C [Forms] [TApplication.WndProc] [6671]
    ST: 00432E46 [Classes] [StdWndProc] [10967]
    ST: 7E418734 [] [Unknown function at GetDC] []
    ST: 7E418816 [] [Unknown function at GetDC] []
    ST: 7E4189CD [] [Unknown function at GetWindowLongW] []
    ST: 7E4196C7 [] [DispatchMessageA] []
    ST: 0048183D [Forms] [TApplication.ProcessMessage] [6873]
    ST: 00481884 [Forms] [TApplication.HandleMessage] [6892]
    ST: 00481B1F [Forms] [TApplication.Run] [6976]
    ST: 004D8610 [sentinel2] [initialization] []
    ST: 7C816FD7 [] [Unknown function at RegisterWaitForInputIdle] []
9E0A101F GDI object -- Font
Allocator function: CreateFontIndirectA
    ST: 00435637 [Graphics] [TFont.GetHandle] [1576]
    ST: 00436BF6 [Graphics] [TCanvas.CreateFont] [2500]
    ST: 00436B68 [Graphics] [TCanvas.RequiredState] [2482]
    ST: 004369F3 [Graphics] [TCanvas.GetHandle] [2430]
    ST: 0044D300 [StdCtrls] [TCustomLabel.DoDrawText] [1469]
    ST: 0044D4EF [StdCtrls] [TCustomLabel.AdjustBounds] [1525]
    ST: 0044D474 [StdCtrls] [TCustomLabel.Loaded] [1508]
    ST: 0042FD03 [Classes] [TReader.ReadRootComponent] [6569]
    ST: 0042CE18 [Classes] [TStream.ReadComponent] [4975]
    ST: 004BB57A [sentmain2] [swap_panel] [1039]
    ST: 004BBD6D [sentmain2] [TForm1.AlarmtimerTimer] [1304]
    ST: 00496FE4 [ThdTimer] [TThreadedTimer.DoTimer] [121]
    ST: 00430F40 [Classes] [CheckSynchronize] [9339]
    ST: 0048118C [Forms] [TApplication.WndProc] [6671]
    ST: 00432E46 [Classes] [StdWndProc] [10967]
    ST: 7E418734 [] [Unknown function at GetDC] []
    ST: 7E418816 [] [Unknown function at GetDC] []
    ST: 7E4189CD [] [Unknown function at GetWindowLongW] []
    ST: 7E4196C7 [] [DispatchMessageA] []
    ST: 0048183D [Forms] [TApplication.ProcessMessage] [6873]
    ST: 00481884 [Forms] [TApplication.HandleMessage] [6892]
    ST: 00481B1F [Forms] [TApplication.Run] [6976]
    ST: 004D8610 [sentinel2] [initialization] []
    ST: 7C816FD7 [] [Unknown function at RegisterWaitForInputIdle] []
961006FC GDI object -- Brush
Allocator function: CreateBrushIndirect
    ST: 00435F43 [Graphics] [TBrush.GetHandle] [1942]
    ST: 0046072E [Controls] [TWinControl.WMEraseBkgnd] [6646]
    ST: 0045BF42 [Controls] [TControl.WndProc] [4646]
    ST: 0045FB13 [Controls] [TWinControl.WndProc] [6343]
    ST: 0045F6E3 [Controls] [TWinControl.MainWndProc] [6237]
    ST: 00432E46 [Classes] [StdWndProc] [10967]
    ST: 7E418734 [] [Unknown function at GetDC] []
    ST: 7E418816 [] [Unknown function at GetDC] []
    ST: 7E41B4C0 [] [Unknown function at DefWindowProcW] []
    ST: 7E41B50C [] [Unknown function at DefWindowProcW] []
    ST: 7C90EAE3 [] [KiUserCallbackDispatcher] []
    ST: 0045BF42 [Controls] [TControl.WndProc] [4646]
    ST: 0045FB13 [Controls] [TWinControl.WndProc] [6343]
    ST: 0045BC4D [Controls] [TControl.Perform] [4553]
    ST: 0045F565 [Controls] [TWinControl.UpdateShowing] [6193]
    ST: 0045F518 [Controls] [TWinControl.UpdateShowing] [6186]
    ST: 0045F5E9 [Controls] [TWinControl.UpdateControlState] [6212]
    ST: 0045E7BD [Controls] [TWinControl.InsertControl] [5847]
    ST: 0045A266 [Controls] [TControl.SetParent] [3723]
    ST: 004BB5D4 [sentmain2] [swap_panel] [1045]
    ST: 004BBD6D [sentmain2] [TForm1.AlarmtimerTimer] [1304]
    ST: 00496FE4 [ThdTimer] [TThreadedTimer.DoTimer] [121]
    ST: 00430F40 [Classes] [CheckSynchronize] [9339]
    ST: 0048118C [Forms] [TApplication.WndProc] [6671]
    ST: 00432E46 [Classes] [StdWndProc] [10967]
    ST: 7E418734 [] [Unknown function at GetDC] []
    ST: 7E418816 [] [Unknown function at GetDC] []
    ST: 7E4189CD [] [Unknown function at GetWindowLongW] []
    ST: 7E4196C7 [] [DispatchMessageA] []
    ST: 0048183D [Forms] [TApplication.ProcessMessage] [6873]
Totally output 9 blocks 3 handles in 0 seconds.
Eliminated derived object's fields leak of 33 blocks.
Eliminated leaks on same calling path of 10 blocks.
The most places blocks on same calling path occurs in:
Same count: 3
    ST: 0042EC15 [Classes] [TReader.ReadComponent] [6144]
    ST: 0042EECB [Classes] [TReader.ReadDataInner] [6210]
    ST: 0042EE04 [Classes] [TReader.ReadData] [6190]
    ST: 00431D93 [Classes] [TComponent.ReadState] [9988]
    ST: 00459426 [Controls] [TControl.ReadState] [3358]
    ST: 0045DA1D [Controls] [TWinControl.ReadState] [5475]
    ST: 0042FCC6 [Classes] [TReader.ReadRootComponent] [6567]
    ST: 0042CE18 [Classes] [TStream.ReadComponent] [4975]
    ST: 004BB57A [sentmain2] [swap_panel] [1039]
    ST: 004BBD6D [sentmain2] [TForm1.AlarmtimerTimer] [1304]
Same count: 3
    ST: 0042EBD4 [Classes] [TReader.ReadComponent] [6137]
    ST: 0042EECB [Classes] [TReader.ReadDataInner] [6210]
    ST: 0042EE04 [Classes] [TReader.ReadData] [6190]
    ST: 00431D93 [Classes] [TComponent.ReadState] [9988]
    ST: 00459426 [Controls] [TControl.ReadState] [3358]
    ST: 0045DA1D [Controls] [TWinControl.ReadState] [5475]
    ST: 0042FCC6 [Classes] [TReader.ReadRootComponent] [6567]
    ST: 0042CE18 [Classes] [TStream.ReadComponent] [4975]
    ST: 004BB57A [sentmain2] [swap_panel] [1039]
    ST: 004BBD6D [sentmain2] [TForm1.AlarmtimerTimer] [1304]
End incremental session leak dectection at group 1]]></description>
			<content:encoded><![CDATA[Hi -
Thanks for this software - I think it will prove very popular!
I dont know enough about XP to investigate the problem I have 
- however this is a short explanation:

Im using Delphi7 and XP prof.

Im loading a panel on my app. with objects from disk (child panels, labels etc) and I get a continuous leak when the program runs. I'm swapping the contents of the panel from disk quite often using readcomponent from a Tfilestream. Before I load the panel I clear it as follows:

 for x:=(panel1.ControlCount-1) downto 0  do
  panel1.controls[x].free;

I then start Denomo, (leak begin) switch panels a few times and finish on the same one then (leak end) I dont really understand the output below.

EF0A0E13 GDI object -- Font
Allocator function: CreateFontIndirectA
(I presume this is one of the causes of the leak)

Totally output 9 blocks 3 handles in 0 seconds.
Eliminated derived object's fields leak of 33 blocks.
Eliminated leaks on same calling path of 10 blocks.
The most places blocks on same calling path occurs in:
Same count: 3

Can you explain them please? Thanks.

Filters: MemTyps: [Memory blocks], [Objects], [String], [Dynamic array], [GDI objects]    Session ID: 0
Begin incremental session leak dectection at group 1
Filters: MemTyps: [Memory blocks], [Objects], [String], [Dynamic array], [GDI objects]    Session ID: 1
00FA7F98  BlockSize: 16 String: Ref: 1 Len: 6 "clone2"
    ST: 0042FB8C [Classes] [TReader.ReadRootComponent] [6539]
    ST: 0042CE18 [Classes] [TStream.ReadComponent] [4975]
    ST: 004BB57A [sentmain2] [swap_panel] [1039]
    ST: 004BBD6D [sentmain2] [TForm1.AlarmtimerTimer] [1304]
    ST: 00496FE4 [ThdTimer] [TThreadedTimer.DoTimer] [121]
    ST: 00430F40 [Classes] [CheckSynchronize] [9339]
    ST: 0048118C [Forms] [TApplication.WndProc] [6671]
    ST: 00432E46 [Classes] [StdWndProc] [10967]
    ST: 7E418734 [] [Unknown function at GetDC] []
    ST: 7E418816 [] [Unknown function at GetDC] []

01A42980  BlockSize: 12 String: Ref: 1 Len: 3 "t39"
    ST: 0042EBD4 [Classes] [TReader.ReadComponent] [6137]
    ST: 0042EECB [Classes] [TReader.ReadDataInner] [6210]
    ST: 0042EE04 [Classes] [TReader.ReadData] [6190]
    ST: 00431D93 [Classes] [TComponent.ReadState] [9988]
    ST: 00459426 [Controls] [TControl.ReadState] [3358]
    ST: 0045DA1D [Controls] [TWinControl.ReadState] [5475]
    ST: 0042FCC6 [Classes] [TReader.ReadRootComponent] [6567]
    ST: 0042CE18 [Classes] [TStream.ReadComponent] [4975]
    ST: 004BB57A [sentmain2] [swap_panel] [1039]
    ST: 004BBD6D [sentmain2] [TForm1.AlarmtimerTimer] [1304]

01A42A18  BlockSize: 400 Class: TLabel
    ST: 0042EC15 [Classes] [TReader.ReadComponent] [6144]
    ST: 0042EECB [Classes] [TReader.ReadDataInner] [6210]
    ST: 0042EE04 [Classes] [TReader.ReadData] [6190]
    ST: 00431D93 [Classes] [TComponent.ReadState] [9988]
    ST: 00459426 [Controls] [TControl.ReadState] [3358]
    ST: 0045DA1D [Controls] [TWinControl.ReadState] [5475]
    ST: 0042FCC6 [Classes] [TReader.ReadRootComponent] [6567]
    ST: 0042CE18 [Classes] [TStream.ReadComponent] [4975]
    ST: 004BB57A [sentmain2] [swap_panel] [1039]
    ST: 004BBD6D [sentmain2] [TForm1.AlarmtimerTimer] [1304]

01A5EF1C  BlockSize: 13 GETMEM
    ST: 0040A49E [SysUtils] [StrNew] [6410]
    ST: 0045BFD8 [Controls] [TControl.DefaultHandler] [4663]
    ST: 0045BF42 [Controls] [TControl.WndProc] [4646]
    ST: 0045BC4D [Controls] [TControl.Perform] [4553]
    ST: 0045A413 [Controls] [TControl.SetTextBuf] [3795]
    ST: 0045A4B1 [Controls] [TControl.SetText] [3809]
    ST: 00426EE4 [TypInfo] [SetLongStrProp] [1592]
    ST: 0042F906 [Classes] [TReader.ReadPropValue] [6469]
    ST: 0042F4EE [Classes] [TReader.ReadProperty] [6385]
    ST: 0042EE52 [Classes] [TReader.ReadDataInner] [6202]

01A6D658  BlockSize: 60 GETMEM
    ST: 0043487E [Graphics] [TResourceManager.ChangeResource] [1199]
    ST: 0043549A [Graphics] [TFont.SetData] [1522]
    ST: 00435838 [Graphics] [TFont.SetStyle] [1645]
    ST: 00426DF0 [TypInfo] [SetOrdProp] [1253]
    ST: 0042F4EE [Classes] [TReader.ReadProperty] [6385]
    ST: 0042EE52 [Classes] [TReader.ReadDataInner] [6202]
    ST: 0042EE34 [Classes] [TReader.ReadData] [6196]
    ST: 00431D93 [Classes] [TComponent.ReadState] [9988]
    ST: 00459426 [Controls] [TControl.ReadState] [3358]
    ST: 0042ECA8 [Classes] [TReader.ReadComponent] [6157]

01A6EB68  BlockSize: 16 Class: TList
    ST: 0045E69E [Controls] [TWinControl.Insert] [5818]
    ST: 0045E741 [Controls] [TWinControl.InsertControl] [5838]
    ST: 0045A266 [Controls] [TControl.SetParent] [3723]
    ST: 004591B4 [Controls] [TControl.SetParentComponent] [3274]
    ST: 0042EA6C [Classes] [SetCompName] [6112]
    ST: 0042EC5B [Classes] [TReader.ReadComponent] [6150]
    ST: 0042EECB [Classes] [TReader.ReadDataInner] [6210]
    ST: 0042EE04 [Classes] [TReader.ReadData] [6190]
    ST: 00431D93 [Classes] [TComponent.ReadState] [9988]
    ST: 00459426 [Controls] [TControl.ReadState] [3358]

01A6EBB4  BlockSize: 16 GETMEM
    ST: 0042A59D [Classes] [TList.Grow] [2842]
    ST: 0042A32C [Classes] [TList.Add] [2755]
    ST: 004584C2 [Controls] [ListAdd] [2909]
    ST: 0045E69E [Controls] [TWinControl.Insert] [5818]
    ST: 0045E741 [Controls] [TWinControl.InsertControl] [5838]
    ST: 0045A266 [Controls] [TControl.SetParent] [3723]
    ST: 004591B4 [Controls] [TControl.SetParentComponent] [3274]
    ST: 0042EA6C [Classes] [SetCompName] [6112]
    ST: 0042EC5B [Classes] [TReader.ReadComponent] [6150]
    ST: 0042EECB [Classes] [TReader.ReadDataInner] [6210]

01A73150  BlockSize: 552 Class: TPanel
    ST: 0042FB7E [Classes] [TReader.ReadRootComponent] [6538]
    ST: 0042CE18 [Classes] [TStream.ReadComponent] [4975]
    ST: 004BB57A [sentmain2] [swap_panel] [1039]
    ST: 004BBD6D [sentmain2] [TForm1.AlarmtimerTimer] [1304]
    ST: 00496FE4 [ThdTimer] [TThreadedTimer.DoTimer] [121]
    ST: 00430F40 [Classes] [CheckSynchronize] [9339]
    ST: 0048118C [Forms] [TApplication.WndProc] [6671]
    ST: 00432E46 [Classes] [StdWndProc] [10967]
    ST: 7E418734 [] [Unknown function at GetDC] []
    ST: 7E418816 [] [Unknown function at GetDC] []

01A738DC  BlockSize: 32 GETMEM
    ST: 0043487E [Graphics] [TResourceManager.ChangeResource] [1199]
    ST: 00435DDA [Graphics] [TBrush.SetData] [1875]
    ST: 00435E7E [Graphics] [TBrush.SetColor] [1908]
    ST: 00461D07 [Controls] [TWinControl.CMColorChanged] [7328]
    ST: 0045BF42 [Controls] [TControl.WndProc] [4646]
    ST: 0045FB13 [Controls] [TWinControl.WndProc] [6343]
    ST: 0045BC4D [Controls] [TControl.Perform] [4553]
    ST: 0045A714 [Controls] [TControl.SetColor] [3901]
    ST: 00426DF0 [TypInfo] [SetOrdProp] [1253]
    ST: 0042F4EE [Classes] [TReader.ReadProperty] [6385]

EF0A0E13 GDI object -- Font
Allocator function: CreateFontIndirectA
    ST: 00435637 [Graphics] [TFont.GetHandle] [1576]
    ST: 00436BF6 [Graphics] [TCanvas.CreateFont] [2500]
    ST: 00436B68 [Graphics] [TCanvas.RequiredState] [2482]
    ST: 004369F3 [Graphics] [TCanvas.GetHandle] [2430]
    ST: 0044D300 [StdCtrls] [TCustomLabel.DoDrawText] [1469]
    ST: 0044D4EF [StdCtrls] [TCustomLabel.AdjustBounds] [1525]
    ST: 0044D474 [StdCtrls] [TCustomLabel.Loaded] [1508]
    ST: 0042FD03 [Classes] [TReader.ReadRootComponent] [6569]
    ST: 0042CE18 [Classes] [TStream.ReadComponent] [4975]
    ST: 004BB57A [sentmain2] [swap_panel] [1039]
    ST: 004BBD6D [sentmain2] [TForm1.AlarmtimerTimer] [1304]
    ST: 00496FE4 [ThdTimer] [TThreadedTimer.DoTimer] [121]
    ST: 00430F40 [Classes] [CheckSynchronize] [9339]
    ST: 0048118C [Forms] [TApplication.WndProc] [6671]
    ST: 00432E46 [Classes] [StdWndProc] [10967]
    ST: 7E418734 [] [Unknown function at GetDC] []
    ST: 7E418816 [] [Unknown function at GetDC] []
    ST: 7E4189CD [] [Unknown function at GetWindowLongW] []
    ST: 7E4196C7 [] [DispatchMessageA] []
    ST: 0048183D [Forms] [TApplication.ProcessMessage] [6873]
    ST: 00481884 [Forms] [TApplication.HandleMessage] [6892]
    ST: 00481B1F [Forms] [TApplication.Run] [6976]
    ST: 004D8610 [sentinel2] [initialization] []
    ST: 7C816FD7 [] [Unknown function at RegisterWaitForInputIdle] []
9E0A101F GDI object -- Font
Allocator function: CreateFontIndirectA
    ST: 00435637 [Graphics] [TFont.GetHandle] [1576]
    ST: 00436BF6 [Graphics] [TCanvas.CreateFont] [2500]
    ST: 00436B68 [Graphics] [TCanvas.RequiredState] [2482]
    ST: 004369F3 [Graphics] [TCanvas.GetHandle] [2430]
    ST: 0044D300 [StdCtrls] [TCustomLabel.DoDrawText] [1469]
    ST: 0044D4EF [StdCtrls] [TCustomLabel.AdjustBounds] [1525]
    ST: 0044D474 [StdCtrls] [TCustomLabel.Loaded] [1508]
    ST: 0042FD03 [Classes] [TReader.ReadRootComponent] [6569]
    ST: 0042CE18 [Classes] [TStream.ReadComponent] [4975]
    ST: 004BB57A [sentmain2] [swap_panel] [1039]
    ST: 004BBD6D [sentmain2] [TForm1.AlarmtimerTimer] [1304]
    ST: 00496FE4 [ThdTimer] [TThreadedTimer.DoTimer] [121]
    ST: 00430F40 [Classes] [CheckSynchronize] [9339]
    ST: 0048118C [Forms] [TApplication.WndProc] [6671]
    ST: 00432E46 [Classes] [StdWndProc] [10967]
    ST: 7E418734 [] [Unknown function at GetDC] []
    ST: 7E418816 [] [Unknown function at GetDC] []
    ST: 7E4189CD [] [Unknown function at GetWindowLongW] []
    ST: 7E4196C7 [] [DispatchMessageA] []
    ST: 0048183D [Forms] [TApplication.ProcessMessage] [6873]
    ST: 00481884 [Forms] [TApplication.HandleMessage] [6892]
    ST: 00481B1F [Forms] [TApplication.Run] [6976]
    ST: 004D8610 [sentinel2] [initialization] []
    ST: 7C816FD7 [] [Unknown function at RegisterWaitForInputIdle] []
961006FC GDI object -- Brush
Allocator function: CreateBrushIndirect
    ST: 00435F43 [Graphics] [TBrush.GetHandle] [1942]
    ST: 0046072E [Controls] [TWinControl.WMEraseBkgnd] [6646]
    ST: 0045BF42 [Controls] [TControl.WndProc] [4646]
    ST: 0045FB13 [Controls] [TWinControl.WndProc] [6343]
    ST: 0045F6E3 [Controls] [TWinControl.MainWndProc] [6237]
    ST: 00432E46 [Classes] [StdWndProc] [10967]
    ST: 7E418734 [] [Unknown function at GetDC] []
    ST: 7E418816 [] [Unknown function at GetDC] []
    ST: 7E41B4C0 [] [Unknown function at DefWindowProcW] []
    ST: 7E41B50C [] [Unknown function at DefWindowProcW] []
    ST: 7C90EAE3 [] [KiUserCallbackDispatcher] []
    ST: 0045BF42 [Controls] [TControl.WndProc] [4646]
    ST: 0045FB13 [Controls] [TWinControl.WndProc] [6343]
    ST: 0045BC4D [Controls] [TControl.Perform] [4553]
    ST: 0045F565 [Controls] [TWinControl.UpdateShowing] [6193]
    ST: 0045F518 [Controls] [TWinControl.UpdateShowing] [6186]
    ST: 0045F5E9 [Controls] [TWinControl.UpdateControlState] [6212]
    ST: 0045E7BD [Controls] [TWinControl.InsertControl] [5847]
    ST: 0045A266 [Controls] [TControl.SetParent] [3723]
    ST: 004BB5D4 [sentmain2] [swap_panel] [1045]
    ST: 004BBD6D [sentmain2] [TForm1.AlarmtimerTimer] [1304]
    ST: 00496FE4 [ThdTimer] [TThreadedTimer.DoTimer] [121]
    ST: 00430F40 [Classes] [CheckSynchronize] [9339]
    ST: 0048118C [Forms] [TApplication.WndProc] [6671]
    ST: 00432E46 [Classes] [StdWndProc] [10967]
    ST: 7E418734 [] [Unknown function at GetDC] []
    ST: 7E418816 [] [Unknown function at GetDC] []
    ST: 7E4189CD [] [Unknown function at GetWindowLongW] []
    ST: 7E4196C7 [] [DispatchMessageA] []
    ST: 0048183D [Forms] [TApplication.ProcessMessage] [6873]
Totally output 9 blocks 3 handles in 0 seconds.
Eliminated derived object's fields leak of 33 blocks.
Eliminated leaks on same calling path of 10 blocks.
The most places blocks on same calling path occurs in:
Same count: 3
    ST: 0042EC15 [Classes] [TReader.ReadComponent] [6144]
    ST: 0042EECB [Classes] [TReader.ReadDataInner] [6210]
    ST: 0042EE04 [Classes] [TReader.ReadData] [6190]
    ST: 00431D93 [Classes] [TComponent.ReadState] [9988]
    ST: 00459426 [Controls] [TControl.ReadState] [3358]
    ST: 0045DA1D [Controls] [TWinControl.ReadState] [5475]
    ST: 0042FCC6 [Classes] [TReader.ReadRootComponent] [6567]
    ST: 0042CE18 [Classes] [TStream.ReadComponent] [4975]
    ST: 004BB57A [sentmain2] [swap_panel] [1039]
    ST: 004BBD6D [sentmain2] [TForm1.AlarmtimerTimer] [1304]
Same count: 3
    ST: 0042EBD4 [Classes] [TReader.ReadComponent] [6137]
    ST: 0042EECB [Classes] [TReader.ReadDataInner] [6210]
    ST: 0042EE04 [Classes] [TReader.ReadData] [6190]
    ST: 00431D93 [Classes] [TComponent.ReadState] [9988]
    ST: 00459426 [Controls] [TControl.ReadState] [3358]
    ST: 0045DA1D [Controls] [TWinControl.ReadState] [5475]
    ST: 0042FCC6 [Classes] [TReader.ReadRootComponent] [6567]
    ST: 0042CE18 [Classes] [TStream.ReadComponent] [4975]
    ST: 004BB57A [sentmain2] [swap_panel] [1039]
    ST: 004BBD6D [sentmain2] [TForm1.AlarmtimerTimer] [1304]
End incremental session leak dectection at group 1]]></content:encoded>
		</item>
		<item>
			<title>Denomo in service on Win2003 Server</title>
			<link>http://www.kbasm.com/forum/showthread.php?tid=8</link>
			<pubDate>Mon, 28 Jul 2008 05:25:46 -0500</pubDate>
			<guid isPermaLink="false">http://www.kbasm.com/forum/showthread.php?tid=8</guid>
			<description><![CDATA[It seems latest Denomo works better than latest FastMM, but: I could run it in Delphi Intraweb 8 NT service .exe on one Win2003 Server, but it fails on another server PC even on service installing through command line "-install" switch. This shouldn't be an application environment issue - both has DenomoRuntime.dll in .exe folder, etc. Successful PC reports Xeon 2.8GHz double-CPU. Unsuccessful - Pentium D 2.8 Ghz double CPU. Both have Microsoft Windows [Version 5.2.3790]. I doubt that I will be able to debug this service. On "bad" server program always fails immediately with non-informative message like
---------------------------
Visual Studio Just-In-Time Debugger
---------------------------
An unhandled win32 exception occurred in JourSchema.exe [4604]. Just-In-Time debugging this exception failed with the following error: No installed debugger has Just-In-Time debugging enabled. In Visual Studio, Just-In-Time debugging can be enabled from Tools/Options/Debugging/Just-In-Time.
Check the documentation index for 'Just-in-time debugging, errors' for more information.
---------------------------
OK   
---------------------------
So, can anyone help with it ? :-)]]></description>
			<content:encoded><![CDATA[It seems latest Denomo works better than latest FastMM, but: I could run it in Delphi Intraweb 8 NT service .exe on one Win2003 Server, but it fails on another server PC even on service installing through command line "-install" switch. This shouldn't be an application environment issue - both has DenomoRuntime.dll in .exe folder, etc. Successful PC reports Xeon 2.8GHz double-CPU. Unsuccessful - Pentium D 2.8 Ghz double CPU. Both have Microsoft Windows [Version 5.2.3790]. I doubt that I will be able to debug this service. On "bad" server program always fails immediately with non-informative message like
---------------------------
Visual Studio Just-In-Time Debugger
---------------------------
An unhandled win32 exception occurred in JourSchema.exe [4604]. Just-In-Time debugging this exception failed with the following error: No installed debugger has Just-In-Time debugging enabled. In Visual Studio, Just-In-Time debugging can be enabled from Tools/Options/Debugging/Just-In-Time.
Check the documentation index for 'Just-in-time debugging, errors' for more information.
---------------------------
OK   
---------------------------
So, can anyone help with it ? :-)]]></content:encoded>
		</item>
		<item>
			<title>Hooking a method from an interface</title>
			<link>http://www.kbasm.com/forum/showthread.php?tid=7</link>
			<pubDate>Tue, 20 May 2008 14:31:28 -0500</pubDate>
			<guid isPermaLink="false">http://www.kbasm.com/forum/showthread.php?tid=7</guid>
			<description><![CDATA[Hi

Thanks for your hook libray - it's enabled me to hook GetSysColor and allow custom colours on a TEdit! Great!!

I can see how you hook functions - but I can't see how to hook methods from an interface.

What I'm really after doing is hooking directX to send fake keystrokes - as outlined here :-

http://www.codeproject.com/KB/system/Hoo...X_COM.aspx

Is this possible with your library? Any chance of a demo app on hooking interface/class methods? (I also need to read up on dll injection as well - but one thing at a time!)


Thanks in advance


PS - Forgot to mention - I'm using delphi

Thanks]]></description>
			<content:encoded><![CDATA[Hi

Thanks for your hook libray - it's enabled me to hook GetSysColor and allow custom colours on a TEdit! Great!!

I can see how you hook functions - but I can't see how to hook methods from an interface.

What I'm really after doing is hooking directX to send fake keystrokes - as outlined here :-

http://www.codeproject.com/KB/system/Hoo...X_COM.aspx

Is this possible with your library? Any chance of a demo app on hooking interface/class methods? (I also need to read up on dll injection as well - but one thing at a time!)


Thanks in advance


PS - Forgot to mention - I'm using delphi

Thanks]]></content:encoded>
		</item>
		<item>
			<title>Does Denomo work for C++ Builder?</title>
			<link>http://www.kbasm.com/forum/showthread.php?tid=6</link>
			<pubDate>Thu, 15 May 2008 20:26:52 -0500</pubDate>
			<guid isPermaLink="false">http://www.kbasm.com/forum/showthread.php?tid=6</guid>
			<description><![CDATA[Dear all,

Just found this site while googling for memory leak detection tools.  I am using Borland's C++ Builder instead of Delphi as C/C++ is more or less a native programming language of myself.

I tried migrating Denomo into C++ Builder.  The Denomo.pas could be compiled and the LeakInspector worked in linking to the application.  However LeakInspector reported many unreasonable leaks for the very simple application.

So my question is as the subject, does Denomo work for C++ Builder?
If it is positive, are there any configurations required to make it work?

Any kind advice are much appreciated.

Thanks in advance.

Cheers,
Patrick
]]></description>
			<content:encoded><![CDATA[Dear all,

Just found this site while googling for memory leak detection tools.  I am using Borland's C++ Builder instead of Delphi as C/C++ is more or less a native programming language of myself.

I tried migrating Denomo into C++ Builder.  The Denomo.pas could be compiled and the LeakInspector worked in linking to the application.  However LeakInspector reported many unreasonable leaks for the very simple application.

So my question is as the subject, does Denomo work for C++ Builder?
If it is positive, are there any configurations required to make it work?

Any kind advice are much appreciated.

Thanks in advance.

Cheers,
Patrick
]]></content:encoded>
		</item>
		<item>
			<title>Beginning with code hooking</title>
			<link>http://www.kbasm.com/forum/showthread.php?tid=5</link>
			<pubDate>Tue, 25 Mar 2008 21:10:29 -0500</pubDate>
			<guid isPermaLink="false">http://www.kbasm.com/forum/showthread.php?tid=5</guid>
			<description><![CDATA[Hello and thank you for sharing your great hooking code with others.

I have an application, which process I would like to hook onto and search into. I have no use for altering any of the information, all I really need to understand is how to get started hooking this process and it's respective dll. Once hooked I would like to search the memory of the running process and find variables of different types.

Could your CodeHook library help me do this and if so, would you be so kind as to maybe give me some basic ideas of how to get started? Any help would be greatly apreciated. The main program loads a dll and it is this dll's memory space that I would like to examine and search into. I wish to extract data from it and then save this to a database.

Looking forward to reading your answer!

Best regards,
Gash]]></description>
			<content:encoded><![CDATA[Hello and thank you for sharing your great hooking code with others.

I have an application, which process I would like to hook onto and search into. I have no use for altering any of the information, all I really need to understand is how to get started hooking this process and it's respective dll. Once hooked I would like to search the memory of the running process and find variables of different types.

Could your CodeHook library help me do this and if so, would you be so kind as to maybe give me some basic ideas of how to get started? Any help would be greatly apreciated. The main program loads a dll and it is this dll's memory space that I would like to examine and search into. I wish to extract data from it and then save this to a database.

Looking forward to reading your answer!

Best regards,
Gash]]></content:encoded>
		</item>
		<item>
			<title>Hooking user logoff and system shutdown</title>
			<link>http://www.kbasm.com/forum/showthread.php?tid=4</link>
			<pubDate>Fri, 21 Mar 2008 05:42:45 -0500</pubDate>
			<guid isPermaLink="false">http://www.kbasm.com/forum/showthread.php?tid=4</guid>
			<description><![CDATA[is it possible with CHook ?

regards from a newbie

Paul]]></description>
			<content:encoded><![CDATA[is it possible with CHook ?

regards from a newbie

Paul]]></content:encoded>
		</item>
		<item>
			<title>Hook example</title>
			<link>http://www.kbasm.com/forum/showthread.php?tid=3</link>
			<pubDate>Thu, 21 Feb 2008 14:47:13 -0600</pubDate>
			<guid isPermaLink="false">http://www.kbasm.com/forum/showthread.php?tid=3</guid>
			<description><![CDATA[I am trying to build a simple program that hooks the Windows function MessageBox

I ve analysed the sample that comes with codehook, but I didnt understand how I can do that

Could you supply an exemple for hooking MessageBox?

Tks

Ricardo Nogueira]]></description>
			<content:encoded><![CDATA[I am trying to build a simple program that hooks the Windows function MessageBox

I ve analysed the sample that comes with codehook, but I didnt understand how I can do that

Could you supply an exemple for hooking MessageBox?

Tks

Ricardo Nogueira]]></content:encoded>
		</item>
		<item>
			<title>ANN: Win32 CodeHook V1.0.0 is released</title>
			<link>http://www.kbasm.com/forum/showthread.php?tid=2</link>
			<pubDate>Mon, 04 Feb 2008 07:29:12 -0600</pubDate>
			<guid isPermaLink="false">http://www.kbasm.com/forum/showthread.php?tid=2</guid>
			<description><![CDATA[Read details here.
http://www.kbasm.com/codehook.html

It supports some useful features to make code hooking a piece of cake.
It's free and open source. The license is MPL.

Current version is 1.0.0.

Features:

1, Can hook function that starts with jump instructions.
Most other simple API/code hook technic can not hook functions that
first several instructions include jump instructions such like jmp,
jcc (jump if condition is met), call, jecxz, etc.
CodeHook can rewrite those instructions in a safe way and continue
hooking.

2, Very easily to use.
CodeHook not only supports raw mode code hooking, it also supports
advanced hooking.
CodeHook can generate "bridge code" that connects your hook code
to the target code.
Thus you only need to writer hook code in a unique form (unique
prototype functions) rather than writting different hook code
for different target.
This feature makes it possible to use one hook function to hook
multiple functions.
And even better, both of the hook and target functions can have
various calling conventions. The calling conventions now supported
are stdcall (used by Windows APIs), cdecl (used by C), and register
call (used by Delphi).

3, Very flexible.
CodeHook separates your hook function from the target function.
Your hook function can fully replace the target function, or call
old target function in the hook function in any time you want.
And even more flexible, you can easily modify the parameters
before passing them to the old target function.

4, Can be used by any program language which can use a DLL.
Though CodeHook is written in Delphi, the CHook.dll can be used
by any other languages such like C++.

5, Free and open source.
The license is MPL.

6, More feature will come soon.
CodeHook was made to use in Denomo (a memory leak detection tool),
so it now only supports in-process hooking. But inter-process hooking
and DLL injection will be added in the near future versions.

CodeHook itself has been verified that it can be compiled by Delphi 7
and Delphi 2007. It should but not must be able to be compiled by
Delphi 6, Delphi 2005, and Delphi 2006.

Any advice, suggestions, bug reports, are welcome.]]></description>
			<content:encoded><![CDATA[Read details here.
http://www.kbasm.com/codehook.html

It supports some useful features to make code hooking a piece of cake.
It's free and open source. The license is MPL.

Current version is 1.0.0.

Features:

1, Can hook function that starts with jump instructions.
Most other simple API/code hook technic can not hook functions that
first several instructions include jump instructions such like jmp,
jcc (jump if condition is met), call, jecxz, etc.
CodeHook can rewrite those instructions in a safe way and continue
hooking.

2, Very easily to use.
CodeHook not only supports raw mode code hooking, it also supports
advanced hooking.
CodeHook can generate "bridge code" that connects your hook code
to the target code.
Thus you only need to writer hook code in a unique form (unique
prototype functions) rather than writting different hook code
for different target.
This feature makes it possible to use one hook function to hook
multiple functions.
And even better, both of the hook and target functions can have
various calling conventions. The calling conventions now supported
are stdcall (used by Windows APIs), cdecl (used by C), and register
call (used by Delphi).

3, Very flexible.
CodeHook separates your hook function from the target function.
Your hook function can fully replace the target function, or call
old target function in the hook function in any time you want.
And even more flexible, you can easily modify the parameters
before passing them to the old target function.

4, Can be used by any program language which can use a DLL.
Though CodeHook is written in Delphi, the CHook.dll can be used
by any other languages such like C++.

5, Free and open source.
The license is MPL.

6, More feature will come soon.
CodeHook was made to use in Denomo (a memory leak detection tool),
so it now only supports in-process hooking. But inter-process hooking
and DLL injection will be added in the near future versions.

CodeHook itself has been verified that it can be compiled by Delphi 7
and Delphi 2007. It should but not must be able to be compiled by
Delphi 6, Delphi 2005, and Delphi 2006.

Any advice, suggestions, bug reports, are welcome.]]></content:encoded>
		</item>
		<item>
			<title>How to get it on the road</title>
			<link>http://www.kbasm.com/forum/showthread.php?tid=1</link>
			<pubDate>Wed, 14 Nov 2007 03:39:27 -0600</pubDate>
			<guid isPermaLink="false">http://www.kbasm.com/forum/showthread.php?tid=1</guid>
			<description><![CDATA[Hi,

I'm a relatively casual programmer (beside being a vet) so i might be asking things that are obvious to most. I work in DTP 2006 and I'm really interested in getting mem leakage info on partial program actions.

I don't understand quite how to get things going. What I did was add denomo.pas to the project, manually move it to the top of the uses list in my project file and start compiling. Every subsequent file reported missing when compiling I added manually:
  DenomoMemHooker ,
  DisAsm32,
  Win32Hook,
  DenomoUtils,
  DenomoHost
 until I came to jcldebug which doesn't seem to exists anywhere.]]></description>
			<content:encoded><![CDATA[Hi,

I'm a relatively casual programmer (beside being a vet) so i might be asking things that are obvious to most. I work in DTP 2006 and I'm really interested in getting mem leakage info on partial program actions.

I don't understand quite how to get things going. What I did was add denomo.pas to the project, manually move it to the top of the uses list in my project file and start compiling. Every subsequent file reported missing when compiling I added manually:
  DenomoMemHooker ,
  DisAsm32,
  Win32Hook,
  DenomoUtils,
  DenomoHost
 until I came to jcldebug which doesn't seem to exists anywhere.]]></content:encoded>
		</item>
	</channel>
</rss>