Myślę, że jest to całkiem prosty problem. Muszę odtworzyć ten kod asemblerowy na kod c. Zapewniam również, co myślę, że można, więc miejmy nadzieję, wskaż, gdzie popełniłem błąd i teraz mogę uczyć się na swoich błędach.Kod instalacyjny inżyniera odwrotnego kodu c
.LFBO
pushq %rbp
movq %rsp,%rbp
movl %edi,-4(%rbp)
movl %esi,-8(%rbp)
movl -4(%rbp),%eax
compl -8(%rbp),%eax
jg .L2
movl -8(%rbp),%eax
jmp .L3
.L2:
movl -4(%rbp),%eax
.L3:
popq %rbp
ret
Więc to jest to, co myślę, że dzieje się z tym: pierwsze dwie linie po .LFBO:
pushq %rbp
movq %rsp,%rbp
dopiero utworzenie stosu na wykonanie, która jest o do naśladowania.
movl %edi,-4(%rbp)
jest pobieranie pierwszej zmiennej, nazwać x
movl %esi,-8(%rbp)
jest pobieranie drugi zmienny nazwać Y
movl -4(%rbp),%eax
jest pobieranie X o stosunku w następnej linii
compl -8(%rbp),%eax
porównanie ES zmiennych x i y, obliczając xy
jg .L2
mówi skok .L2 jeśli x> y
< jeśli X = Y, a następnie obliczyć kolejne linie bez skoków do .L2
movl -8(%rbp),%eax
kopii x = Y
jmp .L3
skok .L3
jeśli x> y na linii jg następnie przejść do .L2: i zakończyć tę linię
movl -4(%rbp),%eax
to jest, gdy zdałem sobie sprawę, że jestem naprawdę mylić. Wydaje mi się, że jesteś do kopiowania x x następnie .L3 jest zakończona i myślę, że x jest zwracana
Wystarczy, aby potwierdzić, to zespół AT & T-składnia x86? – Dai
Nie sądzę, że byłeś zdezorientowany. Właśnie patrzysz na niezoptymalizowany kod, więc są linie, które są całkowicie bezużyteczne (jak przypisywanie x do x, jak powiedziałeś). Jak myślisz, co robi ta funkcja, biorąc pod uwagę to wszystko? – JS1
Tak, wierzę, że to jest montaż AT & T-skład x86. Został stworzony z kodu c na linuxie @Dai – scottybobby