업데이트, 미안 :어 번역 작은 코드 조립 - 코드와> C
어셈블리 :
01: cmp edi, 5
02: ja short loc_10001141
03: jmp ds:off_100011A4[edi*4]
04: loc_10001125:
05: mov esi, 40h
06: jmp short loc_10001145
07: loc_1000112C:
08: mov esi, 20h
09: jmp short loc_10001145
10: loc_10001133:
11: mov esi, 38h
12: jmp short loc_10001145
13: loc_1000113A:
14: mov esi, 30h
15: jmp short loc_10001145
16: loc_10001141:
17: mov esi, [esp+0Ch]
18: …
19: off_100011A4 dd offset loc_10001125
20: dd offset loc_10001125
21: dd offset loc_1000113A
22: dd offset loc_1000112C
23: dd offset loc_10001133
24: dd offset loc_1000113A
의사 C : 나는 작은 어셈블리 코드를 변환 할 필요가
switch(edi) {
case 0:
case 1:
// goto loc_10001125;
esi = 0x40;
break;
case 2:
case 5:
// goto loc_1000113A;
esi = 0x30;
break;
case 3:
// goto loc_1000112C;
esi = 0x20;
break;
case 4:
// goto loc_10001133;
esi = 0x38;
break;
default:
// goto loc_10001141;
esi = *(esp+0xC)
break;
}
C로, 그리고 어셈블리 프로그래밍의 총 멍청한 놈으로, 나는 너의 도움이 필요해.
연습 문제가 책에서 나 왔기 때문에 이미 해결책을 찾았지만 이해하는 데 도움이되지 않습니다.
그래서 솔루션의 어셈블리 코드와 스위치 사이의 관계를 이해하려고 노력했습니다. 이것은 코드가 어셈블리 코드로 어떻게 실행되는지 정확히 알 수 없기 때문입니다.
(업데이트 : 좀 더 명확/특정 질문 ^^ 만들려고 노력) : 점프 테이블 작동 않습니다 어떻게, 어떻게 코드가 실행 - 어셈블리 코드가 아닌 C를 -;)
내가하지 내가 충분히 분명하면, 내가 말했듯이, 난 여기 초보자이고, 영어는 제 모국어가 아닙니다! ^^
질문에 코드를 게시하십시오. – Banex
a) 코드를 게시하고 b) 사용하는 플랫폼을 알려준 경우 도움이 될 수 있습니다. 링크를 제공하지 마십시오 ... – 4386427
당신이 링크 한 책이 합법적으로 무료로 제공되지 않는다고 합리적으로 확신합니다 (링크를 불법과 비도덕적인 사이에 연결하는 것). – UnholySheep