On Fri, Sep 3, 2021 at 11:08 PM duilio foschi via lazarus <
lazarus@lists.lazarus-ide.org> wrote:

> I thought it would be easy to use an hex editor like PSPad hex, find the
> number
> 2005 as 07D5 then fix it (maybe after the right guess in case of multiple
> hits).
>

As a test I compiled a simple example on x86_64 with integers for the year,
month and day, placed a break point on the encodedate call and inspected
the assembler:
/home/christo/tmp/project1.lpr:14         date := EncodeDate(y+$1a2b3c4d,
m, d);
OpCode                         Assembler
8B05CEF70700             mov eax,[rip+$0007F7CE]
678DB84D3C2B1A           lea edi,[eax+$1A2B3C4D]
81E7FFFF0000             and edi,$0000FFFF
In this case the constant $1a2b3c4d is added to the content of register
eax, encoded in the lea instruction.  The constant is recognizable as a
little endian byte sequence 4D 3C 2B 1A following the lea instruction bytes
67 8D B8.  Since your setup is probably different, your code may be
compiled into slightly different instruction sequences so you have to
inspect the generated instruction sequence, as mentioned by Bart.

Also note that testing with a string value will likely yield completely
different results, since a string literal will in most cases be stored
separately as mentioned by Sven.  This is in contrast to your original
question of modifying an integerconstant which can easily be encoded as
part of an instruction.

To my surprise, I could not find the word 07D5. As I vaguely remember the
> big endian/little endian question, I tried to look for D507: no hit.
>

This is somewhat surprising since my simple example shows the little endian
encoded constant as part of the instruction bytes. However, you have to
look at the specific instructions generated in your program.

I assume this is for remote patching of a large executable, else it would
be simpler to just distribute the recompiled version?
-- 
_______________________________________________
lazarus mailing list
lazarus@lists.lazarus-ide.org
https://lists.lazarus-ide.org/listinfo/lazarus

Reply via email to