| | |
| Stránka: 1 z 1
| [ Príspevkov: 11 ] | |
Autor | Správa |
---|
Registrovaný: 28.12.09 Prihlásený: 24.05.13 Príspevky: 9 Témy: 3 |
používam MASM32. keď chcem použiť inštrukciu ktorá pracuje z reťazcami tak mi vypíše chybové hlásenie.
Citácia: V aplikaci MyFirstProg.exe došlo k problému a je třeba ji zavřít. Omlouváme se za vzniklé potíže.
napríklad inštrukcia LODSB, alebo STOSB, ale aj ostatné.
treba pouziť nejakú knižnicu? kde môže byť problém?
|
|
Registrovaný: 11.01.09 Prihlásený: 22.04.24 Príspevky: 1385 Témy: 9 Bydlisko: Hrinova | Napísal Fico: 28.12.2009 20:46 | |
|
Z tej hlášky usudzujem, že aplikácia je spustená, teda preložila sa bez problémov. Ak by bolo nutné pripojiť knižnicu (to sa týka výlučne funkcií, nie inštrukcií), tak by sa aplikácia nedala preložiť. K problému: tieto inštrukcie pracujú s reťazcami, čiže zjednodušene povedané priamo s pamäťou. Je dosť možné, že bolo zapisované za nejaký reťazec, prípadne nejaká podobná chyba s neustrážením pamäte. Napíš sem aspoň časť kódu, takto ti skôr dokážeme pomôcť.
|
|
Registrovaný: 28.12.09 Prihlásený: 24.05.13 Príspevky: 9 Témy: 3 | Napísal autor témy marti12: 28.12.2009 21:08 | |
|
Kód: .586 .model flat, stdcall option casemap :none
include \masm32\include\windows.inc include \masm32\include\user32.inc include \masm32\include\kernel32.inc includelib \masm32\lib\user32.lib includelib \masm32\lib\kernel32.lib
.data .code Start: lodsb int 21H
end Start
ano mas pravdu prg. sa prelozil bez problemov. staci ak pouzijem nejaku instrukciu ohladom retazca a program mi aj v debbugeri zastane na nej.
|
|
Registrovaný: 11.01.09 Prihlásený: 22.04.24 Príspevky: 1385 Témy: 9 Bydlisko: Hrinova | Napísal Fico: 28.12.2009 21:26 | |
|
A vieš vôbec, ako sa používa reťazcová inštrukcia?
Pred tým, ako sa začne pracovať s takouto inštrukciou, musí byť v registri ESI offset zdrojového reťazca a v registri EDI offset cieľového reťazca.
Ale to je aj tak jedno, pretože z tohto kódu nie je jasné, či sa jedná o 16-bit alebo 32-bit aplikáciu. --> Načítavaš DLL moduly, čo sa smie iba v 32-bitovej aplikácii. Hneď na konci máš ale prerušenie, čo sa zas v 32-bitovej aplikácii už nepoužíva. Teda ako celok sa tento kód nedá použiť. Takže moja otázka znie:
1.) chceš to prerobiť na 16-bitový program
2.) chceš to prerobiť na 32-bitový program
3.) stači ti iba názorný príklad, ako sa používajú reťazcové inštrukcie
|
|
Registrovaný: 28.12.09 Prihlásený: 24.05.13 Príspevky: 9 Témy: 3 | Napísal autor témy marti12: 28.12.2009 21:36 | |
|
mam nejake priklady o vyuzivani tychto instrukcii. o registroch ktore sa vyuzivaju uz viem ide mi len o to aby mi to nevypisalo uz vyzsie uvedenu chybu.
ak by si bol ochotny tak priklad v 16 bit a 32 bit by mi pomohol.
ospravedlnujem sa ale pred instrukciou prerusenia som mal toto:
Kód: invoke ExitProcess,NULL
je mi jasne ze to meni situaciu s tym prerusenim, ale problem ostava.
|
|
Registrovaný: 19.09.06 Prihlásený: 21.04.24 Príspevky: 749 Témy: 31 Bydlisko: Ružomberok&... | |
Registrovaný: 28.12.09 Prihlásený: 24.05.13 Príspevky: 9 Témy: 3 | Napísal autor témy marti12: 28.12.2009 22:58 | |
|
je jedno co chcem spravit. PROBLEM je ze mi to nechce zobrat ani samotnu instrukciu, to hlasenie mi to vypisuje stale aj ked som skopiroval ten priklad takze som zasa na zaciatku,
|
|
Registrovaný: 19.09.06 Prihlásený: 21.04.24 Príspevky: 749 Témy: 31 Bydlisko: Ružomberok&... |
Kód: .586P .MODEL FLAT,STDCALL
EXTERN ExitProcess@4:NEAR INCLUDELIB c:\MASM32\LIB\KERNEL32.LIB _DATA SEGMENT retazec DB 'PRIKLAD loooodsb',0 _DATA ENDS _TEXT SEGMENT START: lea esi,retazec xor edx,edx xor eax,eax loo: lodsb add edx,eax cmp eax,0 jne loo push 0 call ExitProcess@4 _TEXT ENDS END START
Tu mas priklad lodsb, spocita to ASCII sucet znakov v retazci.
|
|
Registrovaný: 28.12.09 Prihlásený: 24.05.13 Príspevky: 9 Témy: 3 | Napísal autor témy marti12: 29.12.2009 16:30 | |
|
diki moc. ide mi to. problem bol jeden jediny. register ESI "MUSI" byt nastaveny. asi idem moc do podrobnosti ale nevies preco MUSI byt nastaveny a preco mu nestaci ak je v nom ulozena nahodna adresa? na com krachne?
ale to nieja az tak dolezite. len pre zaujimavost. problem si mi vyriesil.
|
|
Registrovaný: 19.09.06 Prihlásený: 21.04.24 Príspevky: 749 Témy: 31 Bydlisko: Ružomberok&... |
nahodna adresa nemoze byt ulozena z dovodu, ze ty nemusis mat pravo citat z tej adresy alebo je to neplatna adresa. V tom pripade program spravi to, co spravil v tvojom prvom poste.
|
|
Registrovaný: 28.12.09 Prihlásený: 24.05.13 Príspevky: 9 Témy: 3 | Napísal autor témy marti12: 29.12.2009 16:49 | |
|
parada a ze assembleristi vymreli
DIKI MOC
|
|
| Stránka: 1 z 1
| [ Príspevkov: 11 ] | |
| Nemôžete zakladať nové témy v tomto fóre Nemôžete odpovedať na témy v tomto fóre Nemôžete upravovať svoje príspevky v tomto fóre Nemôžete mazať svoje príspevky v tomto fóre
|
|