eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingCzego nie lubicie jako programiści?Re: Czego nie lubicie jako programiści?
  • Data: 2017-04-01 19:48:18
    Temat: Re: Czego nie lubicie jako programiści?
    Od: "AK" <n...@n...net> szukaj wiadomości tego autora
    [ pokaż wszystkie nagłówki ]

    Użytkownik "Sebastian Biały" <h...@p...onet.pl> napisał:

    > On 4/1/2017 2:47 PM, AK wrote:
    >>> Czyli hackowanie jednak.
    >> Zadne hackowanie.
    >
    > Jesli zmuszasz biblitekę aby pracowala w warunkach w której jej nie
    > testowano/projektowano i w tym celu musisz poznać internalne działanie
    > kompilatora i linkera, a bywa że i nieudokumentowane i/lub niestabilne jego
    elementy - to jest
    > *czyste* hackerstwo.

    Doucz Cie C. Mangling w C jest _scisle zdefiniowany_ w standardzie
    i niczego nie musze "internalnie" poznawac.
    Zarowno w samym C jak i w laczeniu go (czystego C) z C++
    (czy innymi jezykami programowania).
    PS: Zreszta to jest technika ktora zecydownie preferuje niz mixowanie
    kodu w C z kodem C++ w jednym przebiegu kompilacji/w jednym lib-ie
    (nawet jesli mam pelny dostep do zrodel).

    >> Wsio dokaldnie opisane zarowno w raporcie C jak i C++.
    >> Problemem jest co innego.
    >> Proiblemem jest nieustandaryzowane (w przeciwienstwie do C)
    >> manglowanie nazw w "nowoiczesnym" C++.
    >
    > Czyli jednak wsio nie jest dokładnie opisane? Czyli hackerstwo?

    Jakie hackerstwo?
    Po prostu "tak sie nie robi" poniewaz mangling w C++ zwyczajnie
    nieustandaryzowany (czytaj C++ jest spieprzony).
    Dlatego takie mixowanie interkompilatorowe C++ robi sie
    np.wlasnie za posrednictwem C a w C++ robi sie lekkie owijki
    obiektowe (same *.h) (to niestety pracochlonne, ale to nie moja wina
    ze C++ "tak ma"), albo za posrednictwem dll/so.
    PS: Natomiast "niezdefiniowany" to _jest_ dokladny opis.

    >> Fakt ze to wymaga niekiedy "hackingu" w przypadku mix-u
    >> kompilatorow (nie polecam).
    >
    > No wreszcie.

    Co "no wreszcie"?
    Jakie jest niebezpieczenstwo w tym ze chcemy sie dobrac
    do np. symbolu w DLLce (a wiec ustandarysowanej systemowo
    biblioteki) ktorego mangling jest "nieznany" (czylli nazwa w DLLce jest niewiadoma) ?
    Jelsi znalibysmy ta nazwe to spokojnie mozlinbysmy takigo symbolu/funkcji uzyc
    (gdyz wolanie z dll-ki jest systempowo usystematyzowane - czylio ponad
    kompilatorowe/jezykowe)?
    Problemm polega tylko na tymze my tej nazwy nie znamy.
    Trzeba ja wiec poznac i w tym celu nalezy zmanglowac nazwa C++wa
    i uzyc tej zmanglowanej np w dynamicznym pobraniu adresu z dll-ki
    (GetProcAddress()/dlsym()).
    Jedyny problem jest tym ze mangling jest per-compiler-specyfic
    i dlatego 1.trzeba wiedziec jakim kompilatorem dll-ka jest uskuteczniona
    2. uzyc mangkera z tego wlasnie kompilatora.
    Gdy DLL-a jest w czystym ten nazwa (bez wzledu na kompilator C
    ktorym jest tworzona) jest _zawsze_ zgodny z nazwa w zrodle
    (a w przypadku obj/lib-ow: _ + nazwa_w_zrodle_C)
    wiec problemow 1. i 2. w C zwyczjnie nie ma.
    To jest _jedyna_ roznica - ale daleka od jakiegokolwiek hackerstwa.

    > Pamietam jak kilkanascie lat temu w jednej z firm w okolicy która pisała
    skomplikowany kod pod
    > Sparka, wylatywał u userów, ale nie wylatywał na testowaniu produkcji [1]. Winien
    był jeden hacker
    > w firmie który zgodnie z zasadą "będzie Pan zadowolony" stosował niedozwolone
    sztuczki podczas
    > linkowania aby zmusić stary kod do dzialania z nowym [2]. Wliczając w to edycję
    plików binarnych
    > hex edytorem i automatyczną podmianę prologów funkcji żeby ABI się zgadzało.

    Jak sie ktos nie douczyl, to sobie napisze "hacker" i robi takie i inne glupoty.
    Tymczasem to nie zaden hacker ale zwykly niedouczony palant :(.
    Tymczasem mozna prosto i latwo i zgodnie ze standardami.
    Trzeba "tylko" wiedziec co to jest *.obj, *.lib, *.dll/*.so i co tak naprawde
    robi linker czy loader dllki ("kiedys" linker byl osobnym programem.
    Ba!. Byl programem "ponadjezykowym".)

    PS: Nie moge "wyjsc z podziwu" jak Wy mlodzi dzis piszecie w C/C++
    nie znajac tak podstawowych systemowych rzeczy :(

    AK

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: