FindMapElement
-
- Beiträge: 282
- Registriert: 03.01.2005 11:36
Re: FindMapElement
Hallo nochmals,
muss doch noch was nachfragen wegen ASM. Ich habe einen Disassembler hier gefunden. Nun wollte ich den kompletten Code mal rauscopieren und in den InlineAssembler des PB aufnehmen und wieder compilieren. Doch ich finde keine Funktion im Disassember um den Code rauszukopieren. Gibt es da eine Möglichkeit?
Danke schonmal
muss doch noch was nachfragen wegen ASM. Ich habe einen Disassembler hier gefunden. Nun wollte ich den kompletten Code mal rauscopieren und in den InlineAssembler des PB aufnehmen und wieder compilieren. Doch ich finde keine Funktion im Disassember um den Code rauszukopieren. Gibt es da eine Möglichkeit?
Danke schonmal
- NicTheQuick
- Ein Admin
- Beiträge: 8807
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
Re: FindMapElement
Du kompilierst das mit PB, disassemblierst es wieder, und willst es wieder in PB stecken? Was erhoffst du dir davon? Und warum reicht dir der ASM-Output vom PB-Compiler nicht?
Re: FindMapElement
Mensch Nic, das ist doch eine bewehrte Methode um seinen Code immer um 25% schneller zu machen.NicTheQuick hat geschrieben:Du kompilierst das mit PB, disassemblierst es wieder, und willst es wieder in PB stecken?
Das kennst du doch vom komprimieren von Dateien. Du musst deine Zip-Dateien nur immer wieder in weitere Zip-Dateien packen, und kannst so jede Datei auf nur wenige Bytes komprimieren. (*Sarkasmusschild hochhalt*)
@Martin:
Du kannst den ASM-Code den du disassembled hast nicht als PB-ASM code kompilieren.
Der ASM-Code enthält bereits feste offsets, sodass es zu kollisionen kommt, wenn du ihn mit PB wieder kompilieren willst.
Du kannst ihn dir natürlich angucken und studieren.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
-
- Beiträge: 282
- Registriert: 03.01.2005 11:36
Re: FindMapElement
Guten Morgen,
das was ihr schreibt habe ich nicht vor. Das weiß ich dass das nicht geht und nichts bringt. Ich möchte nur den disassemblierten Code mal sehen. Und das was ich vorhabe ist was ganz anderes.
z.B.
For i = 1 to 10
next i
Wie schaut das nach dem compilieren und disassemblieren aus. Das interessiert mich. Sonst nichts.
Grüße
Martin
das was ihr schreibt habe ich nicht vor. Das weiß ich dass das nicht geht und nichts bringt. Ich möchte nur den disassemblierten Code mal sehen. Und das was ich vorhabe ist was ganz anderes.
z.B.
For i = 1 to 10
next i
Wie schaut das nach dem compilieren und disassemblieren aus. Das interessiert mich. Sonst nichts.
Grüße
Martin
- NicTheQuick
- Ein Admin
- Beiträge: 8807
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
Re: FindMapElement
Schau mal in der Hilfe nach den Parametern für den Compiler. Mit dem Flag /COMMENTED kannst du dir den ASM-Code ausgeben lassen. Oder du suchst hier im Forum.
Aus deiner For-Next-Schleife wird dann z.B. folgendes:
Aus deiner For-Next-Schleife wird dann z.B. folgendes:
Code: Alles auswählen
;
; PureBasic 5.30 Beta 4 (Linux - x64) - generated code
;
; (c) 2014 Fantaisie Software
;
; The header must remain intact for Re-Assembly
;
; :System
; :Import
;
format ELF64
;
extrn memset
extrn exit
;
public PB_MemoryBase
public PB_ArgC
public PB_ArgV
macro pb_public symbol
{
public symbol
_#symbol:
symbol:
}
extrn SYS_InitPureBasic
section '.text' executable align 4096
public main
main:
MOV [PB_InitialStackValue],rsp
SUB rsp,40
MOV [PB_ArgC],edi
MOV [PB_ArgV],rsi
CALL SYS_InitPureBasic
; For i = 1 To 10
MOV qword [v_i],1
_For1:
MOV rax,10
CMP rax,qword [v_i]
JL _Next2
; Next i
_NextContinue2:
INC qword [v_i]
JNO _For1
_Next2:
_PB_EOP:
_PB_EOP_NoValue:
CALL PB_EndFunctions
MOV rsp,[PB_InitialStackValue]
MOV rdi,[PB_ExitCode]
CALL exit
PB_EndFunctions:
SUB rsp,40
ADD rsp,40
RET
section '.data' writeable
pb_public PB_DEBUGGER_LineNumber
dd -1
pb_public PB_DEBUGGER_IncludedFiles
dd 0
pb_public PB_DEBUGGER_FileName
db 0
pb_public PB_Compiler_Unicode
dd 0
pb_public PB_Compiler_Thread
dd 0
pb_public PB_Compiler_Purifier
dd 0
pb_public PB_Compiler_Debugger
dd 0
align 8
align 8
align 8
s_s:
dq 0
dq -1
align 8
_PB_BSSSection:
align 8
I_BSSStart:
PB_MemoryBase: rq 1
PB_ArgC: rd 1
PB_ArgV: rq 1
PB_ExitCode: rq 1
PB_InitialStackValue: rq 1
align 8
PB_DataPointer rq 1
v_i rq 1
align 8
align 8
align 8
align 8
I_BSSEnd:
section '.text' executable align 4096
section '.data' writeable
SYS_EndDataSection:
Re: FindMapElement
Hier der "Kern":
Code: Alles auswählen
For i = 1 to 10
Next i
Code: Alles auswählen
MOV qword [v_i], 1 ; Setze Variable i auf 1
_For1:
MOV rax, 10 ; Schiebe 10 in Register RAX
CMP rax, qword [v_i] ; Vergleiche Register RAX mit Variable i
JL _Next2 ; Wenn kleiner, springe zum ende der Schleife
_NextContinue2:
INC qword [v_i] ; Erhöhe Variable i um 1
JNO _For1 ; Springe bei keinem Überlauf zum Anfang der Schleife
_Next2:
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
-
- Beiträge: 282
- Registriert: 03.01.2005 11:36
Re: FindMapElement
Herzlichen Dank!
Genau das habe ich gesucht. Werde heute Abend mal schauen was bei dem ein oder anderen Beispielcode als ASM herauskommt.
Grüße
Martin
Genau das habe ich gesucht. Werde heute Abend mal schauen was bei dem ein oder anderen Beispielcode als ASM herauskommt.
Grüße
Martin
-
- Beiträge: 282
- Registriert: 03.01.2005 11:36
Re: FindMapElement
Guten Abend,
nun wollte ich weitermachen, doch etwas geht nicht. Folgendes habe ich im Forum gefunden, damit der ASM-Code erzeugt wird.
Tools:
Kommandozeile:
C:\Program Files\PureBasic\Compilers\pbcompiler.exe
Argumente:
"%FILE" /COMMENTED /INLINEASM
Arbeitsverzeichnis:
C:\Program Files\PureBasic\Compilers\
Name:
ASM-Output
Ereignis zum Auslösen des Werkzeugs:
Before Compile/Run
Wenn ich das eingetrahen habe, ist unter Tools der ASM-Output heißt.
Beim betätigen dieses Eintrages bzw. bei Compile/Run sieht man ganz kurz einen schwarzen Bildschirm. Doch die ASM-Datei finde ich nicht. Wo kann ich diese finden.
Grüße
Martin
nun wollte ich weitermachen, doch etwas geht nicht. Folgendes habe ich im Forum gefunden, damit der ASM-Code erzeugt wird.
Tools:
Kommandozeile:
C:\Program Files\PureBasic\Compilers\pbcompiler.exe
Argumente:
"%FILE" /COMMENTED /INLINEASM
Arbeitsverzeichnis:
C:\Program Files\PureBasic\Compilers\
Name:
ASM-Output
Ereignis zum Auslösen des Werkzeugs:
Before Compile/Run
Wenn ich das eingetrahen habe, ist unter Tools der ASM-Output heißt.
Beim betätigen dieses Eintrages bzw. bei Compile/Run sieht man ganz kurz einen schwarzen Bildschirm. Doch die ASM-Datei finde ich nicht. Wo kann ich diese finden.
Grüße
Martin
Re: FindMapElement
Ich habe das so gemacht, dass ich ein Menü "Commented ASM" habe, und dann wird
der ASM-Output mit Notepad++ geöffnet. Für einen schnellen Blick auf den generierten
Source reicht mir das.
Das Tool:

der ASM-Output mit Notepad++ geöffnet. Für einen schnellen Blick auf den generierten
Source reicht mir das.
Das Tool:
Code: Alles auswählen
EnableExplicit
;COMPILER_OPTIONS$ = "/XP /USER"
#EDITOR$ = "D:\EDIT\Notepad++\notepad++.exe"
Procedure Main()
Protected pb_file$ = ProgramParameter(0)
Protected pb_file_dir$ = GetPathPart(pb_file$)
Protected asm_file$ = pb_file_dir$ + "PureBasic.asm"
Protected compiler_exe$ = GetEnvironmentVariable("PB_TOOL_Compiler")
Protected temp$ = GetEnvironmentVariable("TEMP")
Protected editor_exe$ = #EDITOR$
Protected compiler
Protected options$
If GetEnvironmentVariable("PB_TOOL_Debugger")="1"
options$ + " /DEBUGGER"
EndIf
If GetEnvironmentVariable("PB_TOOL_InlineASM")="1"
options$ + " /INLINEASM"
EndIf
If GetEnvironmentVariable("PB_TOOL_Unicode")="1"
options$ + " /UNICODE"
EndIf
If GetEnvironmentVariable("PB_TOOL_Thread")="1"
options$ + " /THREAD"
EndIf
If GetEnvironmentVariable("PB_TOOL_XPSkin")="1"
options$ + " /XP"
EndIf
If GetEnvironmentVariable("PB_TOOL_OnError")="1"
options$ + " /LINENUMBERING"
EndIf
If GetEnvironmentVariable("PB_TOOL_SubSystem")<>""
options$ + " /SUBSYSTEM " + GetEnvironmentVariable("PB_TOOL_SubSystem")
EndIf
;options$ + " /DLL"
DeleteFile(asm_file$)
DeleteFile(temp$ + "\PB_Commented.exe")
If (Len(pb_file$) > 0 And FileSize(pb_file$) > 0)
; the asm file is created in the working dir
compiler = RunProgram(compiler_exe$, Chr(34) + pb_file$ + Chr(34)+" /COMMENTED /EXE " + temp$ + "\PB_Commented.exe " + options$, pb_file_dir$, #PB_Program_Hide | #PB_Program_Wait)
If compiler
If FileSize(asm_file$) >= 0
RunProgram(editor_exe$, asm_file$,"")
Else
MessageRequester("ASM source not found !", Chr(34) + asm_file$ + Chr(34) + " not found.")
EndIf
EndIf
DeleteFile(temp$ + "\PB_Commented.exe")
Else
MessageRequester("PB source not found !", Chr(34) + pb_file$ + Chr(34) + " not found.")
EndIf
EndProcedure
Main()
; IDE Options = PureBasic 5.11 (Windows - x86)
; CursorPosition = 41
; Folding = -
; EnableUnicode
; EnableXP
; Executable = CommentedASM.exe
; CPU = 5
; DisableDebugger
; CompileSourceDirectory

cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
-
- Beiträge: 282
- Registriert: 03.01.2005 11:36
Re: FindMapElement
Guten Abend.
irgendwas klappt nicht. Den PB-Code habe ich nun in das Vereichnis kopiert, in dem pbcompiler.exe liegt (Der PB-Code hat den Namen m.pb). Aslo da, wo nach der Installation alles liegt. Nun habe ich mittels cmd
in den Ordner bewegt, in dem der code liegt und folgendes eingebenen.
pbcompiler /commented m.pb
Folges wird dann angezegt:
compiling m.pb
loading external libraries
Starting compilation
58 lines processed
Creating and launching executables
Error: Linker
POLINK: fatal error: Zugriff verweigert
Was mache ich denn falsch?
irgendwas klappt nicht. Den PB-Code habe ich nun in das Vereichnis kopiert, in dem pbcompiler.exe liegt (Der PB-Code hat den Namen m.pb). Aslo da, wo nach der Installation alles liegt. Nun habe ich mittels cmd
in den Ordner bewegt, in dem der code liegt und folgendes eingebenen.
pbcompiler /commented m.pb
Folges wird dann angezegt:
compiling m.pb
loading external libraries
Starting compilation
58 lines processed
Creating and launching executables
Error: Linker
POLINK: fatal error: Zugriff verweigert
Was mache ich denn falsch?