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í
×
dnes 00:22 | Nová verze

Po třech a půl letech od vydání verze 016 byla vydána nová verze 017 alternativní linuxové distribuce GoboLinux. Podrobnosti v představení nové verze a v poznámkách k vydání. GoboLinux nedodržuje standardní hierarchii souborového systému (FHS), nýbrž jsou jednotlivé programy instalovány do vlastních adresářů.

Ladislav Hagara | Komentářů: 0
včera 16:22 | Nová verze

Byla vydána nová major verze 6.0 multiplatformní digitální pracovní stanice pro práci s audiem (DAW) Ardour. Přehled novinek i s náhledy v oficiálním oznámení.

Ladislav Hagara | Komentářů: 0
včera 11:11 | Zajímavý projekt

Sxmo aneb Simple X Mobile je uživatelské rozhraní pro mobilní telefon PinePhone vycházející z projektu suckless aneb "softwaru, který štve méně". Využívá dlaždicového správce oken dwm, dynamické menu dmenu, emulátor terminálu st nebo webový prohlížeč surf. Videoukázky.

Ladislav Hagara | Komentářů: 11
včera 08:00 | Nová verze

Krita, tj. svobodný program pro skicování, malování a úpravu obrázků, je nově k dispozici (Google Play) také pro operační systémy Android a ChromeOS. Zatím se jedná o beta verzi.

Ladislav Hagara | Komentářů: 1
včera 02:00 | Komunita

Roy Schestowitz se na blogu Techrights dlouhodobě zabývá kauzami Microsoftu souvisejícími s open source a Linuxem. V současné době upozorňuje na četnost článků o Microsoftu v sekci Linux na webu ZDNet nebo že web Softpedia opustil Marius Nestor, který psal o linuxových novinkách, a příslušnou sekci po něm převzal „Microsoft Editor“ Bogdan Popa. Připomíná také dřívější podobné případy.

Fluttershy, yay! | Komentářů: 7
23.5. 09:00 | Nová verze

Po dvou letech od vydání verze 2.94 byla vydána nová major verze 3.00 multiplatformního BitTorrent klienta Transmission (Wikipedie). Přehled novinek na GitHubu. Zdůraznit lze například vylepšenou podporu IPv6.

Ladislav Hagara | Komentářů: 7
23.5. 07:00 | Nová verze

Byla vydána nová verze 13.0 softwarového nástroje s webovým rozhraním umožňujícího spolupráci na zdrojových kódech GitLab (Wikipedie). Představení nových vlastností i s náhledy v příspěvku na blogu.

Ladislav Hagara | Komentářů: 0
23.5. 02:44 | Zajímavý článek

Článek Backstabber's Knife Collection: A Review of Open Source Software Supply Chain Attacks analyzuje celkem 174 útoků v podobě zákeřných balíčků v repozitářích balíčkovacích systémů npm, PyPI a RubyGems.

Fluttershy, yay! | Komentářů: 0
22.5. 08:00 | IT novinky

Programovací jazyk Java slaví 25 let. Představen byl 23. května 1995. Ve středu proběhla online párty. Na sociálních sítích běží kampaň #MovedbyJava. Příští týden se bude vybírat (pdf) to nejlepší z JDK.

Ladislav Hagara | Komentářů: 5
22.5. 07:00 | Zajímavý software

V září 2018 Microsoft zveřejnil na GitHubu zdrojové kódy verzí 1.25 a 2.0 operačního systému MS-DOS. Včera zveřejnil na GitHubu zdrojové kódy s MS-DOSem dodávaného programovacího jazyka GW-BASIC. K dispozici jsou pod licencí MIT.

Ladislav Hagara | Komentářů: 8
Kdy přecházíte na nové vydání distribuce/OS?
 (13%)
 (12%)
 (23%)
 (7%)
 (4%)
 (41%)
Celkem 300 hlasů
 Komentářů: 0
Rozcestník

Dotaz: Zapisovanie do pamate

12.8.2019 19:24 mates
Zapisovanie do pamate
Přečteno: 442×
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: Výlevníček | 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: Výlevníček | 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: 16
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.