När man "kompilerat" ett stycke kod till en dynamiskt binär fil, ser kompilatorn till att koden översätts lite i taget. Den tar hänsyn till samtliga grenar och cachar alla sekvenser.
Den statiska binära filen är skapad på ett helt annat sätt; kompilatorn tar hela koden och översätter rätt av. Då vissa värden endast kan uppkomma vid körning, kan inte kompilatorn upptäcka dessa och den kan därmed inte skapa filen korrekt.
Förstår inte riktigt vad du menar där PersianBulldog. Men det man vanligtvis menar med statisk vs. dynamisk i detta sammanhang är väl huruvida den använder sig av delade objektfiler eller inte (*.so i Linux eller *.dll i windows). En dynamiskt länkad binär är länkad mot sådana .so-filer och behöver dem för att fungera. En statiskt länkad binär har inga beroenden mot sådana filer och fungerar helt självständigt.