1
Ohjelmointi, palvelimet ja muu edistyneempi käyttö / Vs: 32 vs 64 bittinen C ohjelmointi ongelma
« : 17.09.09 - klo:22.06 »
stack smashing attack - kuulostaa todellakin ylikirjoitukselta. (Usein käyttis tekee jonkinlaisen tarkistuksen stackkiin kirjoitettavile matskuille, jottei ilikiät krakkerit pääsisi muuttamaan mm. stakkiin kirjoitettua funktiostapaluuosoitetta). Villinä arvauksena - ohjelmassa on vanhaan tyyliin harrastettu pointteriaritmetiikkaa castaamalla osoittimia inteiksi. (x386 arkkitehtuurissa sekä int että pointteri on yleensä ollut 32 bittinen. x86_64 arkkitehtuureissa int on yleensä 32 bittinen, ja osoitin 64 bittinen => castauksessa osa osoitteesta leikkautuu pois.)
Mahdollista on myös se, että jokin pointterin palauttava funktio ei ole esiteltynä => paluuarvon defaultti on int => 32 bittisessä x86 systeemssä toimii, 64 bittisessä ei.
gdb ja debuggeri ovat hyviä vaihtoehtoja, samoin kaikkien käännösvaroitusten enablointi ja korjaaminen. Kannattaa myös koettaa 64 bittisessä ympäristössa kääntää 32 bittiseksi, ja kokeilla toimiiko niin.
Mikäli käytät linuxia, kannattaa ehdottomasti koettaa ajaa ohjelma valgrind nimisen muistianalyysityökalun sisällä - tulee lähes joka linux distron mukana.
Mahdollista on myös se, että jokin pointterin palauttava funktio ei ole esiteltynä => paluuarvon defaultti on int => 32 bittisessä x86 systeemssä toimii, 64 bittisessä ei.
gdb ja debuggeri ovat hyviä vaihtoehtoja, samoin kaikkien käännösvaroitusten enablointi ja korjaaminen. Kannattaa myös koettaa 64 bittisessä ympäristössa kääntää 32 bittiseksi, ja kokeilla toimiiko niin.
Mikäli käytät linuxia, kannattaa ehdottomasti koettaa ajaa ohjelma valgrind nimisen muistianalyysityökalun sisällä - tulee lähes joka linux distron mukana.