Source code of a method.

Baz burg.basile at yahoo.com
Mon Nov 4 11:50:21 PST 2013


On Monday, 4 November 2013 at 18:00:17 UTC, Baz wrote:
> On Monday, 4 November 2013 at 16:42:42 UTC, Jacob Carlborg 
> wrote:
>> On 2013-11-04 16:09, Baz wrote:
>>> On Saturday, 26 October 2013 at 16:36:35 UTC, TheFlyingFiddle 
>>> wrote:
>>>> Is there a way to extract the source code of a method at 
>>>> compiletime?
>>>
>>> Yep, at least on win32. (tested in win7 32 with DEP set to 
>>> "ON" for
>>> everything)
>>>
>>> http://dpaste.dzfl.pl/19c77eee
>>>
>>> It doesn't run on DPaste (linux x86_64) that's why I restrict 
>>> the "yes"
>>> to my own local test (on win32).
>>>
>>> basically:
>>> - set memory mode for reading code and grab it.
>>> - transform. (in my example I patch a bool as return value).
>>> - set memory mode for writing and patch it with your 
>>> "patched-grabed-code".
>>> - call new code.
>>>
>>> :)
>>
>> That can't work at compile time?
>
> No it's only a run-time trick.
> interesting example: turn mad a cracker who makes static 
> analysic of the code.
> Because the code disasm from the exe is different from the code 
> executed at run-time...

http://s22.postimg.org/w589e9oyp/Patcher_Win32.png
you can clearly see that after "run-time" patching proc3 return 
false instead of true...actually it's a common crack...33C0 vs 
B001.

But if you want to monkey the stuff you have enough space
- nop it (90)
- rewrite your function and patch the offsets...
- put your calls for your start stop tracing stuffs
- in the remaining nop field put your E8<address of copied 
code>...

and as you have no manual control over inlining you'll get UB...


More information about the Digitalmars-d-learn mailing list