abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    dnes 04:00 | Nová verze

    Byla vydána (Mastodon, 𝕏) nová stabilní verze 2.10.38 svobodné aplikace pro úpravu a vytváření rastrové grafiky GIMP (GNU Image Manipulation Program). Přehled novinek v oznámení o vydání a v souboru NEWS na GitLabu. Nový GIMP je již k dispozici také na Flathubu.

    Ladislav Hagara | Komentářů: 0
    dnes 00:22 | Komunita

    Google zveřejnil seznam 1220 projektů od 195 organizací (Debian, GNU, openSUSE, Linux Foundation, Haiku, Python, …) přijatých do letošního, již dvacátého, Google Summer of Code.

    Ladislav Hagara | Komentářů: 0
    včera 22:22 | IT novinky

    Na základě DMCA požadavku bylo na konci dubna z GitHubu odstraněno 8535 repozitářů se zdrojovými kódy open source emulátoru přenosné herní konzole Nintendo Switch yuzu.

    Ladislav Hagara | Komentářů: 3
    včera 00:33 | Nová verze

    Webový prohlížeč Dillo (Wikipedie) byl vydán ve verzi 3.1.0. Po devíti letech od vydání předchozí verze 3.0.5. Doména dillo.org již nepatří vývojářům Dilla.

    Ladislav Hagara | Komentářů: 0
    4.5. 15:00 | Komunita

    O víkendu probíhá v Bostonu, a také virtuálně, konference LibrePlanet 2024 organizovaná nadací Free Software Foundation (FSF).

    Ladislav Hagara | Komentářů: 0
    4.5. 13:22 | Nová verze

    Nová vývojová verze Wine 9.8 řeší mimo jiné chybu #3689 při instalaci Microsoft Office 97 nahlášenou v roce 2005.

    Ladislav Hagara | Komentářů: 0
    3.5. 13:11 | Nová verze

    Coppwr, tj. GUI nástroj pro nízkoúrovňové ovládání PipeWire, byl vydán v nové verzi 1.6.0. Zdrojové kódy jsou k dispozici na GitHubu. Instalovat lze také z Flathubu.

    Ladislav Hagara | Komentářů: 0
    2.5. 22:33 | Nová verze

    Byla vydána dubnová aktualizace aneb nová verze 1.89 editoru zdrojových kódů Visual Studio Code (Wikipedie). Přehled novinek i s náhledy a animovanými gify v poznámkách k vydání. Vypíchnout lze, že v terminálu lze nově povolit vkládání kopírovaného textu stisknutím středního tlačítka myši. Ve verzi 1.89 vyjde také VSCodium, tj. komunitní sestavení Visual Studia Code bez telemetrie a licenčních podmínek Microsoftu.

    Ladislav Hagara | Komentářů: 30
    2.5. 21:22 | Nová verze

    Proton, tj. fork Wine integrovaný v Steam Play a umožňující v Linuxu přímo ze Steamu hrát hry určené pouze pro Windows, byl vydán ve verzi 9.0-1 (𝕏). Přehled novinek se seznamem nově podporovaných her na GitHubu. Aktuální přehled her pro Windows běžících díky Protonu také na Linuxu na stránkách ProtonDB.

    Ladislav Hagara | Komentářů: 2
    2.5. 19:33 | Nová verze

    Byla vydána verze 1.78.0 programovacího jazyka Rust (Wikipedie). Podrobnosti v poznámkách k vydání na GitHubu. Vyzkoušet Rust lze například na stránce Rust by Example.

    Ladislav Hagara | Komentářů: 0
    Podle hypotézy Mrtvý Internet mj. tvoří většinu online interakcí boti.
     (63%)
     (9%)
     (16%)
     (12%)
    Celkem 105 hlasů
     Komentářů: 8, poslední 4.5. 08:25
    Rozcestník

    Dotaz: Zapisovanie do pamate

    12.8.2019 19:24 mates
    Zapisovanie do pamate
    Přečteno: 494×
    Ahojte potreboval by som v C / C++ daco zapisat na adresu v pamati

    V Basicu na to boli funckie

    PEEK(ADRESA%) - funkcia precitala hodnotu zo zadanej adresy
    POKE ADRESA%, hodnota% - procedura zapisala hodnotu na zadanu adresu ak sme chceli zapisat znak bolo ho potrebne previest na cislo

    A k tymto funkciam bola este prikaz:
    DEF SEG, ktorym sa prepinali segmenty.

    Ako sa tieto funkcie a prikazy volaju v C++ resp C? Alebo vedeli by ste mi poradit ako tento priklad z basicu prepisat do C++?
    DIM a%(2)
    DEF SEG = VARSEG(a%(0))
    FOR i% = 0 TO 2
      READ d%
      POKE VARPTR(a%(0)) + i%, d%
    NEXT i%
    DATA 205, 5, 203
    
    CALL ABSOLUTE(VARPTR(a%(0)))
    DEF SEG
    

    Řešení dotazu:


    Odpovědi

    12.8.2019 21:33 debian+
    Rozbalit Rozbalit vše Re: Zapisovanie do pamate
    9 Smerniky

    V C neprepinaju pametove segmenty.
    xkucf03 avatar 12.8.2019 21:40 xkucf03 | skóre: 49 | blog: xkucf03
    Rozbalit Rozbalit vše Re: Zapisovanie do pamate

    Zapisovat můžeš pomocí funkce outb():

    outb(0b00000001, addr);

    (celý příklad)

    Nebo si ukazatel mířící na dané místo v paměti přetypovat na datový typ, který chceš zapsat a pak normálně přiřadit pomocí =.

    Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
    13.8.2019 10:26 R
    Rozbalit Rozbalit vše Re: Zapisovanie do pamate
    out zapisuje na I/O port, nie do pamati.
    13.8.2019 11:45 Rezervní Polská Kotace
    Rozbalit Rozbalit vše Re: Zapisovanie do pamate
    Je sice pravda, že na x86 jsou to oddělené adresní prostory, ale v první řadě by to chtělo vědět, co je cílem tazatele. Dost možná totiž přímo do paměti zapisovat nepotřebuje...
    13.8.2019 18:56 petr_p | skóre: 59 | blog: pb
    Rozbalit Rozbalit vše Re: Zapisovanie do pamate

    Cílem je kopírovat příklady z Dokumentace QBasicu poplatné reálnému režimu x86.

    Ne že by ho jazyk C omezoval v zapisování do paměti. Ale skok na konkrétní adresu už problém bude. Předně C bude očekávat platformě závislou volací konvenci, takže autor bude muset ty tři bajty kódu obalit nějakou hlavičkou. A pak bude muset najít operační systém, který mu dovolí spustit kód z adresy, kam má právo zapisovat. Řada moderních systémů takovému mapování paměti brání. Nehledě na to, že volání BIOSu mu z uživatelského ringu opět fungovat nebude. Ale je docela možné, že tazatel stále používá DOS a jen vyměnil QBasic za C.

    13.8.2019 20:07 debian+
    Rozbalit Rozbalit vše Re: Zapisovanie do pamate
    Ako skakanie v Cecku funguje. Pouziva sa goto. Ale nikto ti negarantuje, ze sa neposkodi zasobnik. C je cecko.
    Předně C bude očekávat platformě závislou volací konvenci, takže autor bude muset ty tři bajty kódu obalit nějakou hlavičkou. A pak bude muset najít operační systém, který mu dovolí spustit kód z adresy, kam má právo zapisovat. Řada moderních systémů takovému mapování paměti brání. Nehledě na to, že volání BIOSu mu z uživatelského ringu opět fungovat nebude. Ale je docela možné, že tazatel stále používá DOS a jen vyměnil QBasic za C.
    Ak on mysli na skok na nejaku funkciu z adresa, da sa to. Zavolat funkciu cez smernik na funkciu. Ale nechod tak LOW ak nemusis a nechod az tak LOW ako pascal resp. assambler. Ano, ma pravdu, ze existuje nejake standart, ako sa predavaju data medzi OS a programom. A je to v C osetrene aj platformove veci - napr. big/little endian. Pokial sa bavime o OS s Linuxom. Ak to zariadenie nema OS. Tak volas funkcie alebo funkcie cez smernik na funkcie, pouzitie goto alebo inline assambler v C.
    13.8.2019 20:13 debian+
    Rozbalit Rozbalit vše Re: Zapisovanie do pamate
    Hm, este tu mame setjmp() a longjmp(), pre "goto" nie len v prave lokalnom ("static") .c subore.
    Jendа avatar 14.8.2019 01:16 Jendа | skóre: 78 | blog: Jenda | JO70FB
    Rozbalit Rozbalit vše Re: Zapisovanie do pamate
    Ale skok na konkrétní adresu už problém bude. Předně C bude očekávat platformě závislou volací konvenci, takže autor bude muset ty tři bajty kódu obalit nějakou hlavičkou.
    A pokud se bude chtít vrátit, tak bude muset vědět, co ten kód udělal, a jak po něm uklidit. Ale to mu neporadíme dokud nebudeme vědět o co se snaží.

    (pokud to má správnou konvenci tak teoreticky chce udělat to co dělá dlopen/dlsym, ne?)
    A pak bude muset najít operační systém, který mu dovolí spustit kód z adresy, kam má právo zapisovat. Řada moderních systémů takovému mapování paměti brání.
    AFAIK to jde třeba na Linuxu dost snadno vypnout (viz mprotect) a i takový non-executable stack se teprve nedávno řešil že by měl být všude defaultně zapnutý.
    13.8.2019 09:35 rastos | skóre: 62 | blog: rastos
    Rozbalit Rozbalit vše Re: Zapisovanie do pamate
    Toto bude prča.

    /me clicks "Začni sledovat"
    13.8.2019 11:40 Rezervní Polská Kotace
    Rozbalit Rozbalit vše Re: Zapisovanie do pamate
    Co je špatného na tom, že odložil svůj Commodore 64 na půdu a pořídil si modernější systém?
    13.8.2019 12:13 rastos | skóre: 62 | blog: rastos
    Rozbalit Rozbalit vše Re: Zapisovanie do pamate
    Špatné absolutne nic. Ale občas je zábavné sledovať ľudí zažívajúcich kultúrny šok ;-)
    Řešení 1× (xkucf03)
    Jendа avatar 13.8.2019 17:06 Jendа | skóre: 78 | blog: Jenda | JO70FB
    Rozbalit Rozbalit vše Re: Zapisovanie do pamate
    Příklad z Arduína, zapíše 0x7777 na adresu 0x0300
    volatile uint16_t *const bootKeyPtr = (volatile uint16_t *)0x0300;
    *bootKeyPtr = 0x7777;
    
    Samozřejmě pokud je to na nějakém operačním systému a ne přímo bare-metal, tak jde o virtuální paměť, kterou tvému programu poskytl operační systém. Pokud chceš přímo zapisovat do fyzické paměti (například máš v paměti namapované nějaké zařízení, které se pomocí zápisů ovládá), musíš si (na Linuxu) zkompilovat podporu pro zařízení /dev/mem. Následně toto zařízení otevřeš, pomocí lseek dojedeš na danou pozici a pomocí read přečteš (případně je možné namapovat kousek tohoto souboru pomocí mmap do tvého virtuálního prostoru a zápisy jsou pak překládány jak by člověk čekal).
    15.8.2019 17:31 Jindřich Makovička | skóre: 17
    Rozbalit Rozbalit vše Re: Zapisovanie do pamate
    Pokud opravdu chcete ekvivalent uvedeného kódu, tak tady. (v DOSu by to mohlo tu obrazovku na tiskárně vyjet, v Linuxu to pochopitelně spadne na segfault)
    #include <stdlib.h>
    
    void int5() {
        asm volatile("int $5" : : : "memory");
    }
    
    
    int main(int argc, char **argv) {
        int5();
    
        return EXIT_SUCCESS;
    }
    
    15.8.2019 20:36 debian+
    Rozbalit Rozbalit vše Re: Zapisovanie do pamate
    gcc pouzi AT/X syntax. Zaujimavostou je, ze mozte v tom asm pouzivat premenne z C prostredia a prekladat ich nahradi, za realne hodnoty pri preklade.

    Založit nové vláknoNahoru

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.