-
Postów
22 -
Dołączył
-
Ostatnio
-
Days Won
3
Typ zawartości
Profile
Fora
Kalendarz
Articles
Pliki
Wszystko napisane przez antonone
-
Trzeba było dodać, że wypełniają ją tylko osoby które programują w parze, bo część pytań oznaczona gwiazdką nie ma opcji "nigdy nie programuję w parze" (tylko jedno pytanie ma taką odpowiedź).
-
Jakbyś wkleił kod i treść błędu, to może ktoś by miał jak Ci odpowiedzieć
-
Najlepsze narzędzia do inżynierii wstecznej w 2022 roku
topic odpowiedział antonone Bartosz Wójcik w Reverse engineering
Od niedawna jest dostępna trochę nowsza wersja, 10.3.2, gdzie w końcu dodali wsparcie dla look and feel "FlatLaf", mocno zwiększa czytelność i wprowadza ciemny temat kolorystyczny. Kwestia nadal jest subiektywna, ale według mnie wygląd mocno podskoczył do góry na skali estetyki- 1 odpowiedź
-
- reversing
- inżynieria wsteczna
- (1 więcej)
-
Pozostaje życzyć powodzenia Btw, stopka na dole strony nadal żyje w 2015r
-
Nie ma potrzeby się tak unosić. Z mojego punktu widzenia nie prosiłaś o pomoc, tylko o wyręczenie. Wyręczenie z kolei to nie jest pomoc na dłuższą metę, tylko szkoda, bo nie dość, że kolejnego problemu też nie rozwiążesz, to jeszcze będzie on trudniejszy niż był teraz.
-
Kupi sobie student zaliczenie, a potem narzeka, że pracy nie może znaleźć, bo firmy zbyt wiele wymagają
-
Nie, ciągle go za słabo znam, żeby napisać w nim coś większego. Mam go na liście języków do nauki już od jakiegoś czasu i co jakiś czas wracam, żeby przeczytać o nim co nieco
-
Sorry, dopiero teraz zauważyłem post. Ostatnia linijka, chyba wypadła Ci nazwa zmiennej z lewej strony operatora ".&.", tzn.: in Data.Char.chr ( rhsfn13 Data.Bits..&. 0xFFFF )U mnie działa $ ghc prog2.hs [1 of 1] Compiling Main ( prog2.hs, prog2.o ) Linking prog2 ... $ ./prog2 abc!
-
Używanie kodu Rust z projektu C++ mam już sprawdzone ;), polega na wykorzystaniu FFI w celu zapewnienia bezpieczeństwa typów. Po stronie Rust, kod źródłowy obiektu dzielonego (DLL), z niego wyjdzie np. libdylib.so: #![crate_type = "dylib"] extern crate libc; use std::ffi::CStr; #[no_mangle] pub fn hello_world(name: *const libc::c_char) { let buf_name = unsafe { CStr::from_ptr(name).to_bytes() }; let str_name = String::from_utf8(buf_name.to_vec()).unwrap(); println!("Hello, {}!", str_name); } Poprzez wykorzystanie specyfikatora "no_mangle", symbol dla funkcji hello_world będzie wyglądał tak, jak np. przy użyciu extern "C" w C++, czyli będzie miał wycięte informacje o typach, etc - "_hello_world". Taką DLL'kę lub obiekt dzielony można załadować standardowo, jak każdy inny obiekt. Po stronie C++: #include <iostream> #include <dlfcn.h> int main() { void* lib = dlopen("./target/release/libdylib.so", RTLD_LAZY); if(!lib) { std::cout << "can't open libdylib.so\n"; return 1; } void* func = dlsym(lib, "hello_world"); if(!func) { std::cout << "can't locate function hello_world()\n"; dlclose(lib); return 1; } typedef void (*hello_world_fun)(const char* somestr); hello_world_fun hello_world = (hello_world_fun) func; hello_world("C++"); dlclose(lib); return 0; } (dlopen to jest to samo co LoadLibrary, a dlsym to jest to samo co GetProcAddress). Wyjście programu: $ ./test Hello, C++! Na Linuxie można też zlinkować wygenerowany obiekt dzielony do exeka pisanego w C++, więc możliwe jest stworzenie takiego programu, wołającego funkcję z Rust'a bezpośrednio, bez potrzeby ładowania dynamicznego: #include <iostream> #include <dlfcn.h> extern "C" void hello_world(const char* ptr); int main() { hello_world("C++"); return 0; }
-
Do tej pory pisałem jakieś małe narzędzia, które w sumie równie dobrze możnaby napisać w Pythonie lub Ruby, ale nadal się tego języka uczę ;). Gdy zacząłem się nim interesować, to był trochę większy problem niż teraz, bo składnia języka się zmieniała, a gdy się mniej więcej ustabilizowała, to zaczęła się zmieniać standardowa biblioteka. Teraz jest już w miarę spokojnie i można zaczynać do niego podchodzić bardziej na poważnie, jak tylko znajdę trochę czasu to będę kontynuował naukę ;).
-
Ciężko mi określić, czy będzie popularny. Do tej pory zauważyłem, na swoim przykładzie, że jest w nim wysoki learning curve, trzeba się najpierw trochę naczytać, aby zacząć w nim wygodnie pisać. Wpływy z OCaml'a (podobno pierwsze prototypy kompilatora pisane były w OCamlu, teraz Rust jest self-hosting) nie pomagają tym, którzy nigdy w nim nic nie robili. Wydaje mi się, że to, czy będzie popularny czy nie, okaże się dopiero jak Servo zostanie wpięte jako domyślny silnik Firefoxa. Jeśli bezpieczny kod generowany przez Rusta zda egzamin, to kto nie będzie chciał programować w języku który część błędów runtime'owych robionych w C++ łapie już na etapie kompilacji?
-
Odpowiedzi mogą być edytowane, ale w pierwszym poście opcji 'edytuj' nie widzę.
-
Wbiłeś mi się między posty ;). Mozilla tworzyła Rusta (przynajmniej na początku) głównie dla swojego engine'u renderującego HTML - Servo, który będzie chyba najlepszym kandydatem do określenia go mianem produktu flagowego. Jest też sporo kodu napisanego przez community, repozytorium bibliotek znajduje się w serwisie crates.io.
-
Muszę dodać nowy post, ponieważ brakuje opcji edycji postów. Jednym z bardziej ciekawych projektów tworzonych w Rust to jest system operacyjny Redox OS. Co prawda zarzuca mu się zbyt częste korzystanie z keyworda "unsafe", który tymczasowo wyłącza borrow checkera, ale z tego co widziałem autor zdaje sobie sprawę z problemu i obiecuje poprawę ;).
-
Tak może dodam coś na temat Rust, bo wydaje mi się, że jest to jeden z bardziej interesujących języków opracowywanych w ostatnich kilku latach. Killer feature i "materiał eksportowy" w Rust to jest "borrow checker", czyli automatyczny sprawdzacz czasu życia obiektów. Czas życia jest ściśle monitorowany na podstawie tego, kto aktualnie posiada dany obiekt. W jednej chwili tylko jedna rzecz może być właścicielem jakiegoś obiektu, więc nie można sobie np. przekazać tablicy jako argumentu jakiejś funkcji. Trzeba tą tablicę albo "pożyczyć" ("borrow" - wtedy dostęp do niej jest read-only, przez tego co ją pożyczył, i tego, który jest właścicielem, do czasu gdy pożyczenie się zakończy), albo całkowicie "oddać", przy czym wtedy oryginalny właściciel traci dostęp do zasobu i już nie może go używać. To wszystko dzieje się już na etapie kompilacji, a nie działania programu -- jeśli kompilator Rust skompiluje kod, będzie to znaczyło, że przynajmniej istnieje gwarancja na brak ryzyka wystąpienia błędu odczytu pamięci po jej zwolnieniu. Oczywiście temat borrow checkera jest dość obszerny, a powyższy akapit przedstawił jedynie jego prosty zarys, ale może to zachęci kogoś do głębszego zapoznania się z tematem.
-
Zgłaszam przeciw, Erlang to nie jest język skryptowy :). To normalny język programowania, kompilowany do kodu pośredniego ("BEAM") wykonywanego przez maszynę wirtualną. Z tego punktu widzenia przypomina Javę albo dotnet. Istnieją też inne języki na jego vm'kę, np. Elixir lub Joxa.
-
renno: Zwróć uwagę, że to dopiero wersja alpha, tak więc brak różnego rodzaju funkcjonalności wydaje się być kryte ;), tak czy inaczej jestem pełen optymizmu jeśli chodzi o rozwój tego narzędzia, biorąc pod uwagę fakt, że O chyba jako jedyna nie posiada jeszcze debuggera JS. Co do wykorzystania samego JS, to np. dzięki niemu utrzymanie danego programu stoi ponad systemami operacyjnymi, jak też i wspomniana przez nich "hybrydowa" metoda pisania zdejmuje obowiązek martwienia się o update'y w przeźroczysty nawet dla programistów sposób, co też należałoby dodać do jakichkolwiek ocen wyboru takiego podejścia programistów :). bartek: głowy za to dać nie mogę, ale O wydaje się mieć tylko rozszerzenia userjs i wybitnie mało użyteczne "widżety", poszukiwałem swojego czasu czegoś, w czym można napisać jakiś bardziej niskopoziomowy plugin do Opery, niestety niczego nie znalazłem.
-
Nie jestem pewien czy znajdzie się tu jakiś web developer ;), ale myślę że warto wspomnieć Operowym odpowiedniku Firefoxowego Firebuga :> http://www.opera.com/products/dragonfly/
-
Dzięki. Myślałem, że robię coś źle, albo jestem na zbyt niskim poziomie abstrakcji ;), w sumie rzeczywiście nie jest problemem postawić breaka na następną instrukcję...
-
Widziałem to, zależy mi jednak na gdb, bo chodzi mi bardziej o naukę tego programu, a nie o skutek ;).
-
Orientuje się ktoś w jaki sposób można postawić breakpoint na entrypoint w gdb mając załadowany exek bez debug info? Jedyną rzeczą którą do tej pory udało mi się osiągnąć to break na np. *_start + 5 (w moim przypadku to jest druga instrukcja), nie wiem jednak jak zrobić to na pierwszą instrukcję - gdb nie zatrzymuje się na break _start. Nie mam praktycznie żadnego doświadczenia z gdb, stąd takie pytanie :)
-
A o qemu słyszeliście? ;) Jedna z ciekawych opcji to możliwość wykorzystanie aktualnego terminala jako portu i/o ;> http://fabrice.bellard.free.fr/qemu/