Ne znam da li se pojašnjenje nalazi na linku koji si podlednji ostavio jer se ne otvara, ali neko može samo da pilji u citiran kod i da mu ništa nije jasno ... pa da pokušam da objasnim ukratko...
Ovo se manje više smatra jednim od načina exploita format string funkcija jer takav tip funkcija prima varijabalan broj parametara i preuzima ih sa stack-a. Te ako funkcija očekuje 2 parametara, drugi parametar možeš da gurneš u stack na adresu memorije koju možeš da vidiš gde se nalazi nakon što kompajliraš prvi put program, te tako i ovo parče koda koje si gore citirao će raditi samo na toj jednoj mašini i plus samo na Linux AMD64 bit sistemu uz GCC kompajler verzije 4.8.2. (izvor Tinyhack: Implementing a web server in a single printf() call).
Upravo na tom linku koji si naveo se nalazi objašnjenje - neko reče kako je potrebno da se promene dve adrese jer je rađeno za drugu arhitekturu, e sad ne znam da li je na TH ili na Quora-i gde sam našao ovo.
A taj link koji sam postavio je nešto na foru Chuck Norris facts samo za Jeff Dean-a
Ovo mi je baš bilo potrebno obzirom da sam niz stringova hteo da ponovo spojim dodavajući delimiter između njih, ali klasičnim pristupom delimiter uvek ostane na poslednjem stringu. Ovo je mnogo praktičniji način.
func reverse(string: String) -> String {
let strlen: Int = string.characters.count
var reversedString: String = ""
for i in stride(from: strlen, to: 0, by: -1) {
reversedString += String(string[string.index(string.startIndex, offsetBy: i-1)])
}
return reversedString
}
Verovali ili ne, u Swift-u nije moguće pristupati karakterima u stringu preko [] već preko String.Index. Ovo je funkcija koju sam napisao jer nisam hteo da koristim reverse() funkciju. Nije ni čudo da u rešenjima za ovaj primer nema nijednog ponuđenog rešenja za Swift; mora da su nesrećnici koji su pokušali brzo odustali : >
Ovako to izgleda sa reverse() funkcijom:
String("Neki string".characters.reverse())
Kada dizajnirate bilo kakav API, uvek šaljite neki rezultat nazad.
Možda je ovo seniorima već odavno poznato, ali ja lično nisam imao pojma da pregledači nakon što prođe određeno vreme od slanja zahteva, šalju zahtev i drugi put ukoliko ne dobiju nikakav odgovor od servera jer pretpostavljaju da je došlo do greške pri slanju.