Voor het installeren van een nieuwe interrupt handler in dos kan je gebruik maken van 21h maar hoe doe je dat als er geen besturingsysteem aanwezig is maw hoe installeer je een interrupt handler in real mode?
Groeten.
Groeten.
Rechtsteeks de pointers overschrijven in het interrupt gebied zodat ze naar de proc wijzen die aangeroepen moet worden. Ik geloof dat die op 0040:0000 beginnen ofzo, maar dit is meer een gok dan dat ik het (nog) weet...Verwijderd schreef op vrijdag 06 februari 2009 @ 20:30:
Voor het installeren van een nieuwe interrupt handler in dos kan je gebruik maken van 21h maar hoe doe je dat als er geen besturingsysteem aanwezig is maw hoe installeer je een interrupt handler in real mode?
Groeten.
[ Voor 35% gewijzigd door MrBucket op 06-02-2009 20:49 ]
Yup. Als je hardwarematige interrupts wil gaan afvangen moet je er wel voor zorgen dat je tijdens het omklussen van je interrupt vector table de hardwarematige interrupts even uitschakelt (zie mijn 2e link), anders kon je nog wel eens in de problemen komen.Verwijderd schreef op vrijdag 06 februari 2009 @ 21:02:
dus daar schrijf je het segment en de offset waar de processor moet naar toe springen? klopt dat?
Omdat ik ooit in dos een nieuwe handler heb geïnstalleerd dacht ik dat er voor gewoon in real mode een bijhorende dos interrupt moest bestaan, het is dus voldoende dat daar het adres staat? Groeten.
M.a.w.: de virusscanner had waarschijnlijk zelf int 21h gehooked. Slechte zaak eigenlijk, in mijn beleving waren de meeste virussen van die tijd toen ook al niet zo netjes om alles aan het OS te vragen.Zoijar schreef op vrijdag 06 februari 2009 @ 21:47:
Vroeger kon je daar ook virus scanners mee omzeilen; die dos call werd afgevangen en dan werd je programma gevlagd vanwege interrupt vectoren veranderen, maar als je indirect via een register naar het onderste gedeelte van je geheugen schreef kon hij dat niet zien
1
2
3
4
5
| Call_INT MACRO o pushf db 26h,0ffh,1eh dw o * 4 ENDM |
Zoijar schreef op vrijdag 06 februari 2009 @ 21:59:
Heb de code nog gevonden, uit 1996Gebruikte dit voor calls:
GAS:
1 2 3 4 5 Call_INT MACRO o pushf db 26h,0ffh,1eh dw o * 4 ENDM
1
2
| 26 ES: FF1Eoooo CALL FAR o |
Eeeh, een vraag stellen is prima maar we verwachten hier wel dat je zelf ook al wat hebt geprobeerd en dat je dat ook aangeeft. Dus: heb je hier zelf al informatie over gevonden? Wat lukte daar niet mee? etc.Verwijderd schreef op vrijdag 06 februari 2009 @ 20:30:
Voor het installeren van een nieuwe interrupt handler in dos kan je gebruik maken van 21h maar hoe doe je dat als er geen besturingsysteem aanwezig is maw hoe installeer je een interrupt handler in real mode?
Groeten.
"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney
Ik borduurde verder op mijn kennis die ik had van het installeren van interrupt handler in dos daar ga je de eigenlijke installatie doen mbv een int 21hEeeh, een vraag stellen is prima maar we verwachten hier wel dat je zelf ook al wat hebt geprobeerd en dat je dat ook aangeeft. Dus: heb je hier zelf al informatie over gevonden? Wat lukte daar niet mee? etc.
Tenzij je de code in dat specifieke segment gaat laden, nee. Je moet relocatie doen, maw al je pointer kloppen niet meer en je moet ze aanpassen aan een nieuwe offset. Je offset kan je zo vinden (wederom ook een virus truckje...):Verwijderd schreef op zaterdag 07 februari 2009 @ 12:29:
In het stuk code kan ik voor installatie van mijn handler gebruik maken van de functie seg die mij het segment terug geeft van een procedure maar klopt dit segment wel? maw ik heb zelf de code in een welbepaalde plaats geladen hoe kan ik nu vanuit die code te weten komen waar ik zit ga de functie seg het juiste segment terug geven of enkel een relatief segment binnen de code?
1
2
3
4
| call delta delta: pop bp sub bp,offset delta ;store delta offset in BP |
1
2
3
4
| mov ah,09 lea dx,message add dx,bp int 21h |
Geen verschil, alleen een iets ander code pad op hardware niveau. Waarschijnlijk is die rechstreekse call sneller. Plus dat je geen herkenbare interrupt instructie genereerd...... en er zijn geloof ik wat restricties als je in een interrupt handler bezig bent (int instructie). Ik dacht dat je dan alleen lagere interrupts kon genereren vanuit die handler. Dus als een custom INT 10h handler een int 21h dos call wil maken, dan kan je niet een int 21h gebruiken, maar moet je het zo doen.MrBucket schreef op vrijdag 06 februari 2009 @ 22:11:
Er vanuitgaande dat ES op 0 staat, roep je de betreffende interrupt dus rechtstreeks aan via de interrupt table? Maakt dat een verschil met "Int o" dan?
[ Voor 23% gewijzigd door Zoijar op 07-02-2009 13:15 ]
Geen idee waar je dat vandaan haalt. Software interrupts kun je gewoon nestenZoijar schreef op zaterdag 07 februari 2009 @ 13:08:
Ik dacht dat je dan alleen lagere interrupts kon genereren vanuit die handler. Dus als een custom INT 10h handler een int 21h dos call wil maken, dan kan je niet een int 21h gebruiken, maar moet je het zo doen.
[ Voor 8% gewijzigd door .oisyn op 07-02-2009 13:39 ]
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.
Ah, ok. Je hebt je asm-kennis toch niet toevallig door het schrijven van een virusje he?Zoijar schreef op zaterdag 07 februari 2009 @ 13:08:
[...]
Geen verschil, alleen een iets ander code pad op hardware niveau. Waarschijnlijk is die rechstreekse call sneller. Plus dat je geen herkenbare interrupt instructie genereerd......
Ik kan me wel voorstellen dat het niet verstandig is om in een int 10h handler een DOS-call (int 21h) te doen, omdat 21h functionaliteit biedt die mogelijk zelf gebruik maakt van int 10h, waardoor je in een recursieve loop terecht kan komen.en er zijn geloof ik wat restricties als je in een interrupt handler bezig bent (int instructie). Ik dacht dat je dan alleen lagere interrupts kon genereren vanuit die handler. Dus als een custom INT 10h handler een int 21h dos call wil maken, dan kan je niet een int 21h gebruiken, maar moet je het zo doen.
Zo iets stond me bij. Een TSR op int 10h kon volgens mij geen int 21h genereren in code. Misschien vergis ik me; is ook al weer 13 jaar geleden.oisyn schreef op zaterdag 07 februari 2009 @ 13:37:
Geen idee waar je dat vandaan haalt. Software interrupts kun je gewoon nesten. Voor IRQ's geldt dat lagere IRQ's voorrang hebben op hogere, en bovendien wordt de interrupt flag automatisch gecleared in je handler zodat andere IRQ's er niet doorheen kunnen komen.
Ik had het uiteraard over de standaard real-mode als je boot. Protected mode moet je sowieso je eigen IDT opzetten etc.Bovendien bypass je met jouw methode de protected mode handlers als je in virtual 86 mode zit. Op de standaard plek in de interrupt table hoeft dan ook niet eens wat zinnigs te staan. Een fatsoenlijke DOS extender haalt in z'n protected mode handler wel data uit de interrupt table om dat aan te roepen, maar dat hoeft niet per se.
Wat ik bedoel is dat als je in virtual 86 mode zit (als je app bijv. gewoon in een DOS omgeving draait), en je doet een call far [0:intnum*4], dat dat niet dezelfde bijwerkingen heeft als een int intnum zonder dat je dat zelf doorhebt. Wat dat betreft is het dus onverstandig om direct de call te doenZoijar schreef op zaterdag 07 februari 2009 @ 13:55:
Ik had het uiteraard over de standaard real-mode als je boot. Protected mode moet je sowieso je eigen IDT opzetten etc.
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.
Oh ok. Je gaat dan idd eerst via een ring 0 interrupt gate, en die kan op zijn beurt weer een (oude/legacy) ring 3 handler aanroepen. Die kan overal staan. Ook heb je kans dat je uberhaupt geen rechten hebt om die call rechstreeks te maken. Ligt aan de opzet. Naja... boeien.oisyn schreef op zaterdag 07 februari 2009 @ 14:03:
Wat ik bedoel is dat als je in virtual 86 mode zit (als je app bijv. gewoon in een DOS omgeving draait), en je doet een call far [0:intnum*4], dat dat niet dezelfde bijwerkingen heeft als een int intnum zonder dat je dat zelf doorhebt. Wat dat betreft is het dus onverstandig om direct de call te doen. Voor de TS gaat dit idd niet op.
Nee, maar nadat ik die kennis had opgedaan heb ik wel eens een poging gewaagd. Interessante code vaak.MrBucket schreef op zaterdag 07 februari 2009 @ 13:53:
Ah, ok. Je hebt je asm-kennis toch niet toevallig door het schrijven van een virusje he?
[ Voor 15% gewijzigd door Zoijar op 07-02-2009 14:25 ]
Apple iPhone 16e LG OLED evo G5 Google Pixel 10 Samsung Galaxy S25 Star Wars: Outlaws Nintendo Switch 2 Apple AirPods Pro (2e generatie) Sony PlayStation 5 Pro
Tweakers is onderdeel van
DPG Media B.V.
Alle rechten voorbehouden - Auteursrecht © 1998 - 2025
•
Hosting door TrueFullstaq