Hallo Ihr beiden,
ich bin schon wieder mit etwas neueren Informationen hier gestrandet:
Im Moment beschÀftige ich mich damit, die .EXE cutables, die mit dem
FPC (Free Pascal Compiler) 3.2.0 etwas kleiner zu machen, so dass man
am Ende minimalen binÀr Code erhÀlt.
Dazu habe ich bereits schon 2021 damit angefangen, ist dann aber doch
etwas ins stocken gekommen, und die Sachlage hat sich inzwischen ein
wenig geÀndert.
Im Projekt habe ich mit der 64-Bit Version von IDA 7 ein Assembly von
meinen Projekt (.exe + .dll) erhalten, bei dem ich im Moment nicht so
ganz durchblicke.
Und zwar mÃŒsste fÃŒr die (im Moment bestehende Funktion: nullsub_1 ein
Puffer Label entstehen, damit dann das Programm etwas damit anfangen
kann.
Den eigentliche Code habe ich mittels FPC 3.2.0 erstellen lassen, was
man im Makefile
zu diesen Projekt entnehmen kann.
Als Entwicklungs-Umgebung habe ich:
- Windows 10/11
- MinGW-64 Bit
- und die zu MinGW-64 MYS gehörende POSIX Std.Programme wie
- sed
- ...
genutzt.
Das Makefile ist etwas speziefisch auf meine Umgebung ausgelegt, was
dann evtl. umgeschrieben werden muss.
Ein paar Kommentare auf Englisch sind dann aber auch enthalten.
Als make.exe habe ich die GNU artige Version, die mit MSYS installiert
werden kann, verwendet.
Hier ist der Ausschnitt zu diesen Code, der vom Compiler erzeugt
wurde und mittel IDA 7 wieder disassembliert wurde:
public start
start proc near
var_8= qword ptr -8
push rbp
mov rbp, rsp
lea rsp, [rsp-30h]
mov [rbp+var_8], 0
nop
lea rax, nullsub_1 ; <--- hier
lea rdx, aHalloXxl ; "hallo xxl "
mov rcx, rax
call fpc_ansistr_assign
; in C geschrieben: void* fpc_ansistr_assign(void* dst, void* src);
; ab hier sollte es dann normal weiter gehen
; macht es auch, aber siehe den code oberhalb ...
;
mov rcx, qword ptr cs:nullsub_1
call _$dll$laz_rtl$LengthString
movsx ecx, ax
call _$dll$laz_rtl$WriteLnInteger
lea rcx, aMeerjung ; "meerjung"
call _$dll$laz_rtl$WriteLnString
lea rcx, [rbp+var_8]
call _$dll$laz_rtl$ReadLn
lea rcx, [rbp+var_8]
call fpc_ansistr_decr_ref
mov ecx, 1
call _$dll$laz_rtl$LazExitProcess
nop
nop
mov rcx, rbp
call sub_7FF66A4A1060
mov ecx, 0 ; uExitCode
mov rax, cs:ExitProcess
call rax ; ExitProcess
nop
lea rsp, [rbp+0]
pop rbp
retn
start endp
Und hier könnt Ihr gerne vom github.com das Projekt downloaden:
https://github.com/paule32/mini_fpc_windows
In der test1.pas Datei, die sich im Verzeichnis sample befindet
könnt Ihr entnehmen, dass das vorliegende Problem in Zeile: 11
zu suchen ist.
Dort verlangt der FPC das Symbol fpc_ansistr_assign, was, so
denke ich keine Funktion, sondern eine Addresse mit den Puffer
sein sollte.
Jetzt habe ich so viel geschrieben ...
Wenn was nicht klar sein sollte, oder noch Informationen fehlen,
so bin ich auf RÃŒckantwort gerne dankbar, und werde dienlich bei
stehen.
Mit freundlichen GrÃŒÃen
Jens