Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > C/C++
You last visited: Today at 20:16

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



Skyrim - Text in der Console ausgeben

Discussion on Skyrim - Text in der Console ausgeben within the C/C++ forum part of the Coders Den category.

Reply
 
Old   #1
 
elite*gold: 14
The Black Market: 108/0/1
Join Date: May 2011
Posts: 2,671
Received Thanks: 818
Skyrim - Text in der Console ausgeben

Hey, ich versuche gerade per C und Inline ASM einen Text in der Console auszugeben.
Die Funktion habe ich in Olly bereits gefunden:

Code:
PUSH EAX ; /<%s> => OFFSET LOCAL.134
PUSH OFFSET 01257F00 ; |Format = "Script command "%s" not fount."
MOV ECX, DWORD PTR SS:[ARG.1] ; |
PUSH ECX
CALL 00586620
Jetzt die Frage:
Würde diese Umsetzung stimmen?

Code:
void printConsole(char *szText) {
DWORD dwAddress = 0x00586620;

__asm {
   PUSH EAX
   PUSH OFFSET szText
   MOV ECX, DWORD PTR SS:[ARG.1]
   PUSH ECX
   CALL dwAddrss
}
}
Wenn nicht, wäre es sehr freundlich, mir einen Ansatz zu geben.
vwap is offline  
Old 12/27/2011, 14:15   #2
 
elite*gold: 0
Join Date: Oct 2011
Posts: 814
Received Thanks: 675
Code:
void printConsole(char *szText) {
DWORD dwAddress = 0x00586620;

__asm {
   PUSH EAX
   PUSH OFFSET szText
   [B]MOV ECX, DWORD PTR SS:[ARG.1][/B]
   PUSH ECX
   CALL dwAddrss
}
}

Dürfte eigentlich nicht gehen, weißt du den was ARG.1 ist?
Trollface- is offline  
Old 12/27/2011, 14:24   #3
 
elite*gold: 14
The Black Market: 108/0/1
Join Date: May 2011
Posts: 2,671
Received Thanks: 818
ARG.1 ist der übermittelte Text.
Wäre das dann also ".. PTR SS:[szText]"?
vwap is offline  
Old 12/27/2011, 14:43   #4


 
Ende!'s Avatar
 
elite*gold: 1
Join Date: Feb 2009
Posts: 6,378
Received Thanks: 7,996
ARG.1 ist ein Label, was Olly zur besseren Übersicht einsetzt, um einen Zugriff auf die Parameter der Funktion darzustellen. ARG.1 steht also eigentlich für ebp+8, ARG.2 für ebp+0xC usw., vorausgesetzt natürlich, dass ebp in diesem Fall den für den Stackframe verwendeten Pointer enthält. Welches Register dafür verwendet wird, kann man in den meisten Fällen dem Function-Prologue entnehmen, z.B.:
Code:
push [COLOR="Red"]ebp[/COLOR]
mov [COLOR="Red"]ebp[/COLOR], esp
In diesem Falle wäre ebp das Register, was den Stackframe 'darstellt', was auch in den meisten Programmen der Fall ist.

Was auch immer bei den Calls des Games in EAX und ARG.1 steht, du wirst es ebenfalls übergeben müssen, wenn du möchtest, dass die Funktion korrekt arbeitet. Bei ARG.1 würde ich auf den this-Pointer der Instanz der Console-Klasse tippen, bei EAX ist es ohne mehr umgebenden Code nicht möglich da etwas zu zu sagen (das ist keine Aufforderung mehr Code zu posten, schau dir das lieber selber an).

Wenn du jetzt noch OFFSET weg lässt, sollte das Ganze auch funktionieren
Ende! is offline  
Thanks
1 User
Old 12/27/2011, 14:55   #5
 
elite*gold: 14
The Black Market: 108/0/1
Join Date: May 2011
Posts: 2,671
Received Thanks: 818
Danke Ende,
habe das jetzt wiefolgt:

Code:
PUSH EAX
PUSH szText
MOV ECX, DWORD PTR SS:[szText]
PUSH ECX
CALL dwAddress
Du hast gesagt, ich muss auch EAX durch den korrekten Wert ersetzen, nur durch welchen? Und stimmt der Rest nun?

Zu EAX:
Vor dem "PUSH EAX" steht noch "LEA EAX, [LOCAL.134]".
Was bedeutet das denn?
vwap is offline  
Old 12/27/2011, 14:56   #6


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,909
Received Thanks: 25,409
Ich bezweifle, dass ARG1 der this-ptr ist, da er zusätzlich noch gepusht wird.
Normalerweise würde er ja nur in ECX gemoved werden.
Ich denke, ECX wird hier einfach als Zwischenspeicher genutzt.

Btw. Funktionszeiger wären hier deutlich lesbarer (wenn du dir den Code später nochmal ansiehst) und angenehmer zu nutzen. Solltest sie anstatt inline ASM nutzen ;O
MrSm!th is offline  
Old 12/28/2011, 01:17   #7
 
elite*gold: 14
The Black Market: 108/0/1
Join Date: May 2011
Posts: 2,671
Received Thanks: 818
Ich hab jetzt nochmal gesucht, und direkt die Funktion gefunden, die nur für das ausgeben des Textes auf den Bildschirm verantwortlich war.

Code:
CPU Disasm
Address   Hex dump          Command                                  Comments
00405030  /$  55            PUSH EBP                                 ; TESV.00405030(guessed Arg1,Arg2,Arg3)
00405031  |.  8BEC          MOV EBP,ESP
00405033  |.  8B45 10       MOV EAX,DWORD PTR SS:[ARG.3]
00405036  |.  50            PUSH EAX
00405037  |.  8B4D 0C       MOV ECX,DWORD PTR SS:[ARG.2]
0040503A  |.  51            PUSH ECX
0040503B  |.  8B55 08       MOV EDX,DWORD PTR SS:[ARG.1]
0040503E  |.  52            PUSH EDX
0040503F  |.  E8 755DD000   CALL 0110ADB9
00405044  |.  83C4 0C       ADD ESP,0C
00405047  |.  5D            POP EBP
00405048  \.  C3            RETN
Der Stack sieht so aus:
Code:
CPU Stack
Address   Value      ASCII Comments
0018E848  [00404D6A  jM@   ; /RETURN from TESV.00405030 to TESV.00404D6A
0018E84C  /0018E85C  \è   ; |Arg1 = 18E85C
0018E850  |01257E44  D~%  ; |Arg2 = ASCII "SCRIPTS: Script '%s', line %d:
%s"
0018E854  |0018EC8C  Γ   ; \Arg3 = 18EC8C
Habe es nun so versucht: (An Ende! orientiert)
Code:
DWORD dwAddress = ADR_CONSOLE_PRINT;

		__asm {
			MOV EAX, DWORD PTR SS:[EBP + 0x10]
			PUSH EAX
			MOV ECX, DWORD PTR SS:[szText]
			PUSH ECX
			MOV EDX, DWORD PTR SS:[EBP + 0x8]
			PUSH EDX
			CALL dwAddress
			ADD ESP, 0x0C
		}
Crasht leider, was ist denn falsch?
vwap is offline  
Reply


Similar Threads Similar Threads
[RELEASE] Console Commands for Lame Console Look
12/07/2011 - CO2 PServer Guides & Releases - 12 Replies
Well, to avoid any further useless posts on this subject... here are a ton of console based commands that will control the game from the server console. I will not explain what each does, it should be pretty easy to figure out, and I don't intend to answer stupid questions. If its a good question, I will answer it. public static void DoStuff() { bool flag = true; Console.Clear(); Console.ForegroundColor = ConsoleColor.Red; ...
[Text-TuT] Client Text und Beschriftungen
09/19/2011 - Flyff Private Server - 6 Replies
Hey ElitePvPer's, heute zeige ich euch; - wie man den Text und/oder die Beschriftungen ingame ändert. - Wie man die Farbe des Textes und/oder der Beschriftung ändert. Wir öffnen zu erst die im Resource-Ordner enthaltene textclient.txt.txt. Nehmen wir mal an wir möchten die Farbe und den Text von "Du hast XXX Penya erhalten (Gesamt: XXX Penya)" ändern. Wir suchen dazu(+) in der textClient.txt.txt nach "Penya". Direkt der 2te String ist es: IDS_TEXTCLIENT_INC_000185 Du hast %s Penya...
Ich will 44 e*g ausgeben ;)
08/16/2011 - elite*gold Trading - 6 Replies
Also bietet mir was an :) Was ich NICHT suche : Avatar Youtube Bot Youtube Acc´s Was ich suche :
[Release] Send Text to OutPut console
01/15/2011 - 12Sky2 Hacks, Bots, Cheats & Exploits - 5 Replies
Nothing amazing here. This just uses the output console in-game to send your own custom messages to it. This refers to the box above your chatbox that shows things like damage dealt when you attack, damage you take when your attacked and other things. I use it to output settings of my bot since I don't use a GUI, its nice to see the function status when I activate it or deactivate it. OutPut Console: 004A0A65 |. 6A 02 PUSH 2 ; /Arg2 =...



All times are GMT +1. The time now is 20:17.


Powered by vBulletin®
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2026 elitepvpers All Rights Reserved.