|
|
||||||
|
#1
|
|
|
|
|
dzis okrylem kolo na nowo :) trafilem na metode aktywacji wylapywania
niewyrownanego dostepu na x86 - tej wspanialosci, ktorej nauczyl mnie procesor sparc :) $ cat t.c #include <stdlib.h> int main() { #if defined( __GNUC__ ) #if defined( __i386__ ) /* enable alignment checking on x86 */ asm( "pushf\n\torl $0x40000,(%esp)\n\tpopf" ); #elif defined( __x86_64__ ) /* enable alignment checking on x86_64 */ asm( "pushf\n\torl $0x40000,(%rsp)\n\tpopf"); #endif #endif /* malloc() always provides aligned memory */ char* cptr = malloc( sizeof( int ) + 1 ); /* increment the pointer by one, making it misaligned */ int* iptr = (int *)( cptr + 1 ); *iptr = 42; return 0; } $ gcc -Wall t.c && ./a.out zsh: bus error ./a.out $ dmesg|tail -n1 [338627.314024] a.out[23345] trap alignment check ip:400523 sp:7fff3d701210 error:0 in a.out[400000+1000] ta wspanialosc dostepna juz od czasow i486SX zostala haniebnie zatajona przez znanych nam specjalistow od programowania niebieskich ekranow ;) From Jeffery Richter's "Programming Applications for Windows, 4th Ed": "Let's take a closer look at how the x86 CPU handles data alignment. The x86 CPU contains a special bit flag in its EFLAGS register called the AC (alignment check) flag. By default, this flag is set to zero when the CPU first receives power. When this flag is zero, the CPU automatically does whatever it has to in order to successfully access misaligned data values. However, if this flag is set to 1, the CPU issues an INT 17H interrupt whenever there is an attempt to access misaligned data. The x86 version of Windows 2000 and Windows 98 never alters this CPU flag bit. Therefore, you will never see a data misalignment exception occur in an application when it is running on an x86 processor." detale: bit 18 (Alignment mask) w rejestre CR0 (ustawiany np. przez linuksa). http://en.wikipedia.org/wiki/Control_register bit 18 (Alignment check 486SX+ only) w EFLAGS ustawiamy sobie w aplikacji. http://en.wikipedia.org/wiki/FLAGS_register_(computing) |
|
|
|
#2
|
|
|
|
|
> dzis okrylem kolo na nowo :) trafilem na metode aktywacji wylapywania
[..] > in an application when it is running on an x86 processor." > > detale: > > bit 18 (Alignment mask) w rejestre CR0 (ustawiany np. przez linuksa). > [..] > > bit 18 (Alignment check 486SX+ only) w EFLAGS ustawiamy sobie w aplikacji. > [..]) > super -> o wyrównywaniu allocow pisał Kasperski w swojej książce, ja sam jestem zbyt zielony w temacie by cos sensownego na dany moment powiedzieć - ale jak ktos rozwinie temat to chetnie poczytam, moge nt dodac od siebie wczorajsze spostrzezenie procki czasami nazywa sie alu ale owo arithmetic i owo logic to jedynie dwa filary z trzech na ktorych opiera sie procek, bo są jeszcze _przypisania (malo kto powie ze mov nie rzuca sie w oczy) nie wiem tylko jak tenm trzeci filar procka nazwac I arithmetic II logic III ??? |
|
#3
|
|
|
|
|
On pon, 08 mar 2010 10:49:21 in article news:<hn2hrt$3hs$1>
Paweł wrote: > dzis okrylem kolo na nowo :) trafilem na metode aktywacji wylapywania > niewyrownanego dostepu na x86 - tej wspanialosci, ktorej nauczyl > mnie procesor sparc :) ;) > detale: > > bit 18 (Alignment mask) w rejestre CR0 (ustawiany np. przez linuksa). > [..] > > bit 18 (Alignment check 486SX+ only) w EFLAGS ustawiamy sobie w aplikacji. > [..]) implementacja też jest w wikipedii http://en.wikipedia.org/wiki/Bus_error :) |
|
#4
|
|
|
|
|
> nt dodac od siebie wczorajsze spostrzezenie
> > procki czasami nazywa sie alu ale owo arithmetic i owo logic to > jedynie dwa filary z trzech na ktorych opiera sie procek, bo są > jeszcze _przypisania (malo kto powie ze mov nie rzuca sie w oczy) > nie wiem tylko jak tenm trzeci filar procka nazwac I arithmetic > II logic III ??? >asignment? transfer? ram_operation? mam tez lekka 'zagwostke' jak to niektozy mowia, do ktorej grupy przypisac PUSH, bo troche pasuje to do obslugi skokow czyli rozgalezien a to podlega pod logic, ale tez troche pasuje to do działki przypisań choc to raczej w ubocznym skutku |
|
#5
|
|
|
|
|
profesor_kinbote wrote:
> > procki czasami nazywa sie alu ale owo arithmetic i owo logic to > jedynie dwa filary z trzech na ktorych opiera sie procek, bo są > jeszcze _przypisania (malo kto powie ze mov nie rzuca sie w oczy) > nie wiem tylko jak tenm trzeci filar procka nazwac I arithmetic > II logic III ??? > alu jest *w* procesorze. Wokół (alu) jest sporo innych ukladów realizujących funkcje o których mówisz. |
|
#6
|
|
|
|
|
> profesor_kinbote wrote:
> > > > > procki czasami nazywa sie alu ale owo arithmetic i owo logic to > > jedynie dwa filary z trzech na ktorych opiera sie procek, bo są > > jeszcze _przypisania (malo kto powie ze mov nie rzuca sie w oczy) > > nie wiem tylko jak tenm trzeci filar procka nazwac I arithmetic > > II logic III ??? > > > > alu jest *w* procesorze. Wokół (alu) jest sporo innych ukladów realizujących > funkcje o których mówisz. > Chodzi mi o to ze mozna podzielic zgrabnie instrukcje asma na trzy działy arytmetyczne logiczne i wykonawcze (brzmi troche groznie ale powiedzmy ze ok) przy czym logika i assignmenty są defakto wazniejsze niz arytmetyka - ktora mozna zrobic poprzednimi dwiema, zaczalem wczorak kombinowac asembler ktory skladalby sie tylko z dwu instrukcji mov a b if a b przy czym adresowane sa pojedyncze bity tak ze nawet mov20 (przesun 20 bitow) trzeba sobie samemu napisac i m in zaczalem pisac increment @increment_procedure if a 0 mov a 1 if a 1 mov a 0 * inc a * //trzenba zaimplementowac inkrementacje adresu call @increment_procedure //rekurencyjnie tutaj uzywam tez call choc to tez mozna by zaimplementowac jako mov na ip choć tym sie nie chcialem akurat bawic wystapily male problemy z zaimplementowaniem owego inc a (ale chyba raczej nie zasadnicze) przeciazylem troche banie i zostawilem to ale chyba do tego jeszcze wroce. Gdyby ktos ew chcial pokombinowac jak zrobic tutaj to * inc a * to zapraszam do wypowiedzi - bo jak mowie moja bania zdeczko zostala przeciazona i zrobilem sobie przerwe jest to jednakowoz ciekawy temat - defakto hiperasembler |
|
#7
|
|
|
|
|
fir wrote:
> Chodzi mi o to ze mozna podzielic zgrabnie instrukcje asma na > trzy działy arytmetyczne logiczne i wykonawcze (brzmi troche groznie > ale powiedzmy ze ok) A teraz jeszcze spróbuj pogrupować instrukcje SSE, wzłaszcza ze zbioru 4.2. > zaczalem wczorak kombinowac asembler ktory skladalby sie tylko z > dwu instrukcji Idź na całość: http://en.wikipedia.org/wiki/One_ins...n_set_computer Piotr Wyderski |
|
#8
|
|
|
|
|
> fir wrote:
> > > Chodzi mi o to ze mozna podzielic zgrabnie instrukcje asma na > > trzy działy arytmetyczne logiczne i wykonawcze (brzmi troche groznie > > ale powiedzmy ze ok) > > A teraz jeszcze spróbuj pogrupować instrukcje SSE, wzłaszcza ze zbioru 4.2. > poki co nie nauczylem sie jeszcze SSE - duzo mam jeszcze ciekawych tematyk do opanowania > > zaczalem wczorak kombinowac asembler ktory skladalby sie tylko z > > dwu instrukcji > > Idź na całość: > > [..] > "Common choices for the single instruction are: - Subtract and branch if less than or equal to zero - Subtract and branch if negative - Reverse subtract and skip if borrow - Triggered Move " to powyzej jest nienaturalne i jest to sztuczka _maskujaca_ fakt ze potrzebujesz własnie jednego mova i jednego if'a fir |
|
|
|
Czasy w strefie GMT. Teraz jest 23:12. | Privacy Policy
|