2009-05-12:

ANSI Escape Codes dla Windows 7 RC

windows:bat:re:winapi:easy:asm:c:c++:tools
Wczoraj j00ru dał mi znać że mój add-on do cmd.exe, dodający jakże to ważną funkcjonalność (tj kolorki), nie funkcjonuje poprawnie na Windows 7 RC - w związku z czym rzuciłem okiem, i tak oto powstała wersja 0.004d!

Zainteresowanych detalami działania mojego ansi hacku odsyłam tutaj, w tym poście skupie się jedynie na tych drobnych różnicach między cmd.exe z poprzednich Windowsów, a cmd.exe z W7RC, które to uniemożliwiły działanie wersji 0.004c.

Tak na prawdę różnica była jedna - brak w IAT cmd.exe funkcji LoadLibraryA z której korzysta loader (wykonywany przed EP cmd.exe) do załadowania AnsiSupport.dll. Do tego doszedł bug w moim patcherze - niezainicjowana zmienna - który uniemożliwił wypisanie konkretnego komunikatu o błędzie podczas patchowania - zamiast tego wrzucał "losowy" adres LoadLibraryA w loader, a spatchowane cmd.exe po odpaleniu się wysypywało.

Rozwiązanie problemu polegało na napisaniu wersji patcha która korzystała by z LoadLibraryW (ta funkcja występuje w IAT cmd.exe z W7RC) - oraz poprawy patchera tak aby wrzucał odpowiedni patch, w zależności od potrzeby.

Na koniec download:

cmd_ansihack_004d.zip (31kb, SRC+BIN)

I tyle...

Comments:

2010-06-02 14:49:54 = thc_flow
{
Niestety, wygenerowany plik sypie się na Win 2K SP4 EN, jakieś dokładniejsze info podrzucę jak zainstaluję debugger.

(Microsoft Windows 2000 [Version 5.00.2195])
}
2010-06-08 23:26:13 = Gynvael Coldwind
{
@thc_flow
Przyznaje, że nie testowałem na Windows 2000 :)
Czy poprzednie wersje działały na 2000?
}
2011-06-05 13:36:22 = eider
{
Win 7 x64 nie za bardzo chce współpracować...

System nie może znaleźć komunikatu dla numeru komunikatu 0x2350 w pliku komunika
tów dla Application.

Copyright (c) 2009 Microsoft Corporation. Wszelkie prawa zastrzeżone.
System nie może znaleźć komunikatu dla numeru komunikatu 0x8 w pliku komunikatów
dla System.
}
2020-10-22 17:31:17 = koszja
{
jak zrobić zapis w batch?
}

Add a comment:

Nick:
URL (optional):
Math captcha: 1 ∗ 6 + 6 =