Warum muss der Compiler gepatcht werden?

Hier kann alles mögliche diskutiert werden. Themen zu Purebasic sind hier erwünscht.
Flames und Spam kommen ungefragt in den Mülleimer.
mknjc
Beiträge: 217
Registriert: 09.09.2006 12:59

Warum muss der Compiler gepatcht werden?

Beitrag von mknjc »

Morgen,

ich bin grade dabei ein, zwei kleine Tools für PureBasic zu entwickeln und lese mir grade den Source von jaPBe und dem PureBasic Editor durch.

Jetz ist mir eine Procedure aufgefallen:

Code: Alles auswählen

Procedure PatchPB()
  Result=#False
  in$= CompilerPath$+"pbcompiler.exe"
  out$= CompilerPath$+"PBCompiler-jaPBe.exe"
  ;
  len=FileSize(in$)
  If len>0
    ;
    PBVersion$ = GetPBCompilerVersion(in$) ; gnozal
    ;
    Mem_PbPatch=AllocateMemory(len+10)
    *start.Byte=Mem_PbPatch
    *buf.Byte=*start
    If *buf
      If ReadFile(#File_PBPatch,in$)
        ReadData(*buf,len)
        CloseFile(#File_PBPatch)
      EndIf
      For i=1 To len
        ;lcclnk.exe
        If *buf\b=#LinkerFirstChar1 Or *buf\b=#LinkerFirstChar2
          If CompareMemoryString(*buf,#Linker,#True,10)=0
            *buf\b='f' 
          EndIf
        EndIf
        ; If *buf\b='p' Or *buf\b='P'
          ; If CompareMemoryString(*buf,"PureBasic v",#True,11)=0
            ; *ver.BYTE=*buf+11
            ; PBVersion$=""
            ; While *ver\b<>0 And *ver\b<>13 And *ver\b<>10 And *ver\b<>'-'
              ; PBVersion$+Chr(*ver\b)
              ; *ver+1
            ; Wend
            ; PBVersion$=Trim(PBVersion$)
          ; EndIf
        ; EndIf
        *buf+1
      Next
      
      If FileSize(out$)>0
        If DeleteFile(out$)=0
          ;japbe läuft schon->alles OK
          FreeMemory(Mem_PbPatch)
          ProcedureReturn #True
        EndIf
      EndIf
      
      If CreateFile(#File_PBPatch,out$)
        WriteData(*start,len)
        CloseFile(#File_PBPatch)
        
        If SavePackMem(?FakeLCC, CompilerPath$+#FLinker)
          Result=#True
        EndIf
      EndIf
      FreeMemory(Mem_PbPatch)
    EndIf
  EndIf
  ProcedureReturn Result
EndProcedure
Jatzt frag ich mich: ÄhÖhOhÄhhh?
Was soll dass denn was hat gnozal bzw. GPI denn da gebaut warum muss der Compiler denn gepacht werden und was wird gepatcht?

Hoffentlich kann mir das einer erklären.

Mfg mknjc

[Edit:]So da kommen die Konstanten.

#LinkerFirstChar1 = 'p'
#LinkerFirstChar2 = 'P'
#Linker = "polink.exe"
#FLinker = "folink.exe"

Die Versionsnummer wird nicht geändert. Das scheint irgentwas mit dem polinker zu tun zu haben da jaPBe eine Datei namens folink.exe anlegt.

Aber warum wird nicht einfach die Datei geöffnet und alle polink.exe in folink.exe umbenannt und warum brauch jaPBe diese folink?

Ach ts-soft ich glaube nicht das man um eine Datei zu Kopieren irgentwelche $50 oder $70 in $66 ändern.

[/Edit]
Zuletzt geändert von mknjc am 06.02.2007 22:04, insgesamt 1-mal geändert.
Ich nutze PureBasic 4.02 unter Linux und Windows.

Momentane Projekte:
Das geheimste aller geheimen Projekte... FPBC
Benutzeravatar
DarkSoul
Beiträge: 689
Registriert: 19.10.2006 12:51

Beitrag von DarkSoul »

gib doch mal die werte der konstanten bekannt. ich tippe mal, da wird was an der veersionsnummer geändert, wenn ich mir das auskommentierte etwas genauer ansehe. vielleicht passt die nicht mit japbe oder so
Bild
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

PB-IDE genauso wie jaPBe starten automatisch den PBCompiler und stellen
den in Wartestellung. Damit die IDE und jaPBe nicht ins schleudern kommen,
wird der Compiler umbenannt. So in etwa, da wird nichts an der PBCompiler.exe geändert :mrgreen:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Deeem2031
Beiträge: 1232
Registriert: 29.08.2004 00:16
Wohnort: Vorm Computer
Kontaktdaten:

Beitrag von Deeem2031 »

ts-soft hat geschrieben:PB-IDE genauso wie jaPBe starten automatisch den PBCompiler und stellen
den in Wartestellung. Damit die IDE und jaPBe nicht ins schleudern kommen,
wird der Compiler umbenannt. So in etwa, da wird nichts an der PBCompiler.exe geändert :mrgreen:
Klar wird da was an der Exe verändert. Natürlich wird die vorher kopiert, aber dann wird in der exe nach dem namen der Linker-Exe gesucht und geändert, wodurch dann halt ein anderer Linker gestartet wird. (vorher "polink.exe" danach "folink.exe")

(Dachte eigentlich, dass es allgemein bekannt ist, dass JaPBe das macht)
Bild
[url=irc://irc.freenode.org/##purebasic.de]irc://irc.freenode.org/##purebasic.de[/url]
Antworten