abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
včera 20:22 | Pozvánky

Zítra proběhne jednodenní online konference InstallFest 2021. Na programu je celá řada zajímavých přednášek, workshopů a také stánků. Dění lze sledovat na Twitteru.

Ladislav Hagara | Komentářů: 0
včera 13:11 | Nová verze

Byla vydána nová verze 6.5 v Javě napsané aplikace pro komplexní návrh rozmístění nábytku a dalšího vybavení v interiérech Sweet Home 3D. Vyzkoušet lze online verzi. Nedávno byly aktualizovány také knihovny nábytku.

Ladislav Hagara | Komentářů: 0
včera 08:00 | Humor

Nové verze webových prohlížečů Firefox a Chrome byly vydávány každých 6 týdnů. Vývojářům Firefoxu se nelíbilo, že Chrome bude mít vždy větší číslo verze, proto se rozhodli vydávat nové verze Firefoxu každé 4 týdny. Aktuální stav: Firefox 86 byl vydán v 8. týdnu a Chrome 89 v 9 týdnu letošního roku. V kterém týdnu bude mít Firefox větší číslo verze než Chrome?

… více »
Ladislav Hagara | Komentářů: 29
včera 07:00 | Zajímavý článek

Thom Holwerda popisuje na OSnews pracovní stanici Raptor Blackbird Secure Desktop (architektura POWER9) a své zkušenosti s ní včetně provozu desktopových aplikací.

Fluttershy, yay! | Komentářů: 1
včera 06:00 | Nová verze

Byla vydána nová verze 1.54 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í. Ve verzi 1.54 vyjde také VSCodium, tj. komunitní sestavení Visual Studia Code bez telemetrie a licenčních podmínek Microsoftu.

Ladislav Hagara | Komentářů: 2
4.3. 14:23 | Zajímavý článek

Check Point zveřejnil report, podle kterého NSA v roce 2013 vytvořila exploit pro operační systém MS Windows. Exploit sloužil k lokální eskalaci práv. O rok později tento exploit ukradli hackeři z Číny. Až po dvou letech byl exploit zveřejněn a Microsoft vydal aktualizaci. Jinými slovy, celé téma se točí o tom, jak NSA zřejmě přispěla ke globálnímu snížení kybernetické bezpečnosti. Celý příběh podrobně naleznete na checkpoint.com.

Max | Komentářů: 6
4.3. 09:11 | Komunita

Framework Flutter (Wikipedie) pro vývoj mobilních, webových i desktopových aplikací byl vydán ve verzi 2 a související programovací jazyk Dart (Wikipedie) byl vydán ve verzi 2.12. Proběhla online konference Flutter Engage. Videozáznam je k dispozici na YouTube. Canonical zde oznámil (Twitter, YouTube), že Flutter je výchozí volba pro vývoj nových aplikací pro Ubuntu.

Ladislav Hagara | Komentářů: 0
4.3. 09:00 | IT novinky

Společnost AMD na YouTube představila novou grafickou kartu AMD Radeon RX 6700 XT postavenou na architektuře RDNA 2. V prodeji bude od 18. března. Její cena byla stanovena na 479 dolarů.

Ladislav Hagara | Komentářů: 22
4.3. 08:00 | Nová verze

Uživatelsky přívětivý shell fish byl vydán ve verzi 3.2.0 Vylepšuje uživatelské rozhraní (doplňování, práce s historií úprav textu aj.), přidává napovídání argumentů dalších aplikací, zjednodušuje syntaxi (expanze rozsahů), opravuje chyby.

Fluttershy, yay! | Komentářů: 0
3.3. 16:00 | Zajímavý software

Steam Link je nově dostupný také pro 64bitový x86 Linux. Streamovat hry z výkonného počítače s nainstalovanou službou Steam lze tedy vedle telefonu, tabletu nebo televize i do počítače s Linuxem. Instalovat Steam Link lze z Flathubu. Od prosince 2018 je k dispozici Steam Link pro Raspberry Pi.

Ladislav Hagara | Komentářů: 0
Vzděláváte se formou hromadných online kurzů (MOOC)?
 (57%)
 (9%)
 (1%)
 (6%)
 (27%)
Celkem 119 hlasů
 Komentářů: 0
Rozcestník

Dotaz: Zapisovanie do pamate

12.8.2019 19:24 mates
Zapisovanie do pamate
Přečteno: 461×
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: 76 | 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: 76 | 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.