Bagaimana cara menjalankan program tanpa menginstalnya di komputer Anda? Cara menjalankan program tanpa sistem operasi

Beberapa aplikasi memerlukan hak yang lebih tinggi untuk dijalankan di Windows dan harus dijalankan sebagai administrator. Dalam hal ini, permintaan " Kontrol Akun Pengguna" (Kontrol Akun Pengguna atau UAC), yang mana sistem meminta persetujuan Anda untuk meluncurkan aplikasi.

Banyak pengguna yang salah percaya bahwa Kontrol Akun Pengguna hanyalah gangguan dan menonaktifkannya. Dalam hal ini, keamanan komputer sangat terpengaruh karena persetujuan pengguna tidak lagi diperlukan untuk meluncurkan aplikasi, dan apa pun perangkat lunak perusak dapat memulai dan beroperasi dengan lancar. Kehadiran antivirus juga tidak bisa menjamin keamanan komputer 100%.

Pada artikel ini, saya akan menunjukkan cara menyederhanakan proses menjalankan aplikasi favorit Anda sebagai administrator tanpa menonaktifkan UAC (sepenuhnya atau sebagian) dan tanpa mengorbankan keamanan.

Untuk menjalankan aplikasi sebagai administrator, Anda dapat menggunakan beberapa cara:

Sebagai contoh, kita akan menjalankan baris perintah (cmd) sebagai administrator.

Metode No. 1 (biasa) - diluncurkan melalui tombol kanan mouse (prompt UAC ditampilkan)

Klik kanan pada ikon tersebut aplikasi yang diinginkan dan pilih " Jalankan sebagai administrator":

Metode nomor 2 - luncurkan menggunakan " Ctrl+Shift+Enter" (Permintaan UAC ditampilkan)

Klik Awal, ketikkan perintah yang diinginkan di bilah pencarian dan klik Ctrl+Shift+Enter.

Metode No. 3 - atur untuk dijalankan sebagai administrator di properti pintasan (prompt UAC ditampilkan)

Klik kanan pada pintasan yang diinginkan dan pilih " Properti".

Buka tab " Label", klik" Selain itu", centang kotak" Jalankan sebagai administrator":


Atau pergi ke " Kesesuaian"dan centang kotaknya" Jalankan program ini sebagai administrator":

Metode nomor 4 - sederhanakan peluncuran aplikasi yang dipilih menggunakan penjadwal tugas (prompt UAC tidak ditampilkan)

Penting! Cara ini hanya berfungsi untuk akun yang merupakan bagian dari grup Administrator. Ini tidak akan berfungsi untuk pengguna biasa, karena haknya terbatas.

Mari kita mulai dengan cara yang menarik. Jika ada aplikasi yang Anda jalankan sepanjang waktu, dan berasal dari produsen perangkat lunak yang andal, misalnya ini aplikasi Windows- Anda dapat menyederhanakan peluncurannya. Buat pintasan untuk program yang diinginkan tidak memakan waktu lebih dari 2 menit dan ini akan memungkinkan Anda menghilangkan tindakan yang tidak perlu di masa mendatang. Mari kita luncurkan penjadwal Tugas (Awal---> Semua program ---> Standar---> Melayani---> Penjadwal Tugas) dan tekan " Buat tugas":

Kami menunjukkan Nama untuk tugas baru dan centang kotak " Jalankan dengan hak tertinggi":

Buka tabnya Tindakan, tekan " Membuat", di jendela berikutnya klik" Tinjauan":

Tentukan jalur ke aplikasi yang diinginkan dan klik " Membuka":



Perbesar gambar

Klik " OKE":

Tutup penjadwal dan lanjutkan membuat pintasan.

Untuk membuat pintasan di desktop, klik kanan dan pilih " Membuat" ---> "Label":


Di lapangan Lokasi properti memasuki:

Tugas /jalankan /tn cmd_admin

Di mana cmd_admin- nama tugas yang kita buat. Jika nama mengandung spasi maka harus diberi tanda kutip.

Tetapkan nama pintasan:



Perbesar gambar

Pintasan telah dibuat dan siap digunakan.

Untuk mengubah ikon, klik kanan pada pintasan dan pilih " Properti":

Buka tab " Label"dan tekan" Ubah ikon":

"Tinjauan..."

Tentukan jalur ke program:



Perbesar gambar

Pilih ikon yang diinginkan dan tutup kedua jendela dengan tombol " OKE":

Sekarang aplikasi yang diinginkan diluncurkan sebagai administrator dengan mengklik dua kali pada pintasan yang dibuat, sementara perintah UAC tidak ditampilkan dan keamanan tetap utuh.

Utilitas untuk otomatisasi "Metode No. 4"

Jika Anda perlu membuat pintasan untuk sejumlah besar program, akan lebih mudah untuk menggunakan utilitas ini.

Bekerja dengan utilitas ini terdiri dari dua langkah sederhana:

  • Instalasi
  • Seret dan lepas file yang dapat dieksekusi (*.exe, *.bat, *.cmd) ke pintasan utilitas:


Transfer fokus otomatis ke program yang sedang berjalan

Kekhasan meluncurkan aplikasi dari penjadwal adalah bahwa fokus tidak dialihkan ke jendela dan, misalnya, untuk mengetikkan perintah di baris perintah, Anda juga harus mengklik jendela. Perilaku ini dapat membantu dalam mengotomatisasi operasi terjadwal rutin, namun untuk “Metode No. 4” hal ini tidak selalu nyaman.

Ada beberapa metode untuk "memotong". Cara kerjanya sedikit berbeda, jadi pilihlah yang paling cocok untuk Anda. Yang pertama lebih nyaman untuk meluncurkan program, dan yang kedua untuk menjalankan skrip.

Tambahkan saat membuat tugas:

Menggunakan perintah mulai

Program atau skrip:

Argumen:

/c mulai /d "path_to_program" nama_file.exe

/c mulai /d "C:\Windows\System32\" cmd.exe

Menggunakan utilitas NirCmd

Program atau skrip:

Path_to_nircmd\nircmd.exe

Argumen:

Jalankan pertunjukan "program_path\file_name.exe"

Jalankan pertunjukan "C:\Windows\System32\cmd.exe"

Meluncurkan dialog Jalankan sebagai administrator

Mirip dengan peluncuran garis komando Anda dapat mengonfigurasi peluncuran kotak dialog " Menjalankan", dan perintah yang dimasukkan ke dalamnya juga akan diluncurkan sebagai administrator. Kenyamanan dari pendekatan ini adalah daftar perintah yang digunakan sebelumnya disimpan, dan Anda dapat memilih salah satu yang Anda perlukan dari daftar.


Saat membuat tugas di penjadwal, di " Membuat Tindakan" menunjukkan:

di lapangan" Program atau skrip":

Rundll32

di lapangan" Tambahkan argumen":

Shell32.dll,#61

Unduh utilitas dan buka kemasannya. Kami meluncurkan baris perintah, masukkan perintah yang diinginkan, sintaksnya cukup sederhana:

<путь к утилите> <путь к нужному приложению>


Prompt UAC akan ditampilkan dan aplikasi akan dijalankan sebagai administrator.

Catatan: Dalam konteks menu jendela 7 ada fungsi yang sangat berguna untuk menyalin jalur file: tahan Menggeser, klik kanan pada file tersebut, pilih " Salin sebagai jalur".


Menjalankan program oleh pengguna sebagai administrator tanpa memasukkan kata sandi administrator

Penting! Metode ini tidak aman karena memungkinkan pengguna dengan hak terbatas untuk menjalankan kode dengan hak penuh. Pengguna yang licik atau malware dapat memanfaatkan hal ini dan membahayakan sistem.

Mari pertimbangkan tugas menarik lainnya: akun Anda entri jendela adalah anggota grup administrator, ada satu atau lebih akun yang menjadi anggota grup pengguna. Pengguna perlu menjalankan program yang memerlukan hak lebih tinggi. Biasanya terlihat seperti ini: pengguna mengklik kanan pada file dan memilih "Run as Administrator", dan diminta memasukkan kata sandi administrator:


Tentu saja, memberikan kata sandi administrator kepada pengguna bukanlah hal yang paling tepat ide bagus. Untuk “menyiasatinya” ini, kita akan menggunakan utilitas AdmiLink oleh Alexei Kuryakin. Dengan bantuannya, administrator dapat membuat pintasan bagi pengguna untuk meluncurkan program yang diperlukan, sedangkan kata sandi administrator hanya perlu dimasukkan 1 kali - saat membuat pintasan. Saat pengguna memulai program, kata sandi akan dikirimkan dalam bentuk terenkripsi.



Cara ini akan berhasil jika program hanya dapat dijalankan sebagai administrator dan pengembang tidak lupa menunjukkan kondisi ini di manifes. Namun, masih ada sejumlah besar program atau program lama yang dapat diluncurkan seperti pada mode normal, dan atas nama administrator (serangkaian fungsi berbeda akan tersedia). Saat Anda mencoba meluncurkan program semacam itu menggunakan AdmiLink, program tersebut dimulai dalam mode normal (tanpa hak administratif). Dan jika Anda mencoba mencentang kotak "Metode No. 3. Gaya asli penulis dipertahankan.

Ingin mengizinkan pengguna dengan akun standar menjalankan aplikasi dengan hak administratif tanpa UAC atau permintaan kata sandi? Lalu saya akan memberi tahu Anda cara melakukannya. Kami akan membuat pintasan menggunakan perintah runas /savecred, yang menyimpan kata sandi. Perhatikan bahwa ini dapat dianggap sebagai lubang keamanan - pengguna biasa akan dapat menggunakan runas /savecred untuk menjalankan perintah apa pun sebagai administrator tanpa memasukkan kata sandi. Namun, dalam beberapa situasi mungkin berguna - misalnya, jika Anda ingin anak Anda diperlakukan di luar standar akun dapat menjalankan aplikasi sebagai administrator tanpa bertanya kepada Anda.

Aktifkan akun administrator

Langkah pertama adalah mengaktifkan akun administrator bawaan, yang dinonaktifkan secara default. Jadi, klik kanan pada pintasan Command Prompt dan pilih “Run as administrator.”

Di jendela prompt perintah yang terbuka, jalankan perintah berikut:

administrator pengguna bersih /aktif:ya


Akun tersebut sekarang diaktifkan, meskipun tanpa kata sandi. Untuk mengatur kata sandi, buka Panel Kontrol, pilih kategori Akun Pengguna dan Keamanan Keluarga, lalu buka menu Akun Pengguna. Selanjutnya, klik tautan “Kelola akun lain”.

Pilih akun administrator, klik tombol “Buat Kata Sandi”, dan buat kata sandi untuk akun administrator.

Buat jalan pintas

Sekarang kita akan membuat pintasan yang akan meluncurkan aplikasi dengan hak administrator. Klik kanan pada desktop Anda, pilih Baru, lalu klik Pintasan.

Di jendela yang terbuka, Anda harus memasukkan jenis perintah berikut:

runas/pengguna: Nama komputer\Administrator /simpan rahasia “ C:\Path\To\Program.exe

Harap dicatat bahwa Anda perlu mengganti Nama komputer ke nama komputer Anda, dan C:\Path\To\Program.exe ke jalur lengkap ke program yang ingin Anda jalankan. Misalnya, jika nama komputernya adalah Laptop dan program yang ingin dijalankan adalah Auslogics BoostSpeed, Anda harus memasukkan jalur berikut:

runas /pengguna:Laptop\Administrator /savecred “C:\Program Files\Auslogics\Auslogics BoostSpeed\BoostSpeed.exe"


Di jendela berikutnya, masukkan nama pintasan. Jika mau, Anda dapat memilih ikon untuk pintasan baru - klik kanan padanya dan pilih "Properti".

Di kotak dialog "Properti", klik tombol "Ubah Ikon" dan pilih yang sesuai.

Pertama kali Anda mengklik dua kali pintasan tersebut, Anda akan diminta memasukkan kata sandi untuk akun administrator yang Anda buat sebelumnya.


Kata sandi ini akan disimpan - saat berikutnya Anda memulai program, Anda tidak perlu memasukkannya lagi.

Seperti disebutkan di atas, pada akun standar, pengguna dapat menjalankan program apa pun dengan hak administrator tanpa memasukkan kata sandi (menggunakan perintah runas /savecred), jadi ingatlah hal ini.

Kata sandi administrator disimpan di Manajer Kredensial - jika Anda ingin menghapus kata sandi yang disimpan, Anda dapat melakukannya dari sana.

Semoga harimu menyenangkan!

Hal terpenting tidak dijelaskan secara cukup rinci: bagaimana cara menjalankan kode ini pada perangkat keras sebenarnya? Cara membuatnya sendiri disk boot? Pada artikel ini kami akan menjawab semua pertanyaan ini secara rinci (sebagian pertanyaan ini telah dibahas di artikel sebelumnya, tetapi untuk kemudahan membaca kami akan membiarkan sedikit duplikasi materi).

Ada banyak sekali deskripsi dan tutorial di Internet tentang cara menulis mini-OS Anda sendiri; bahkan ada ratusan OS hobi kecil yang sudah jadi. Salah satu sumber paling berharga tentang topik ini, yang ingin saya soroti secara khusus, adalah portal osdev.org. Untuk melengkapi artikel sebelumnya tentang PCI (dan kesempatan untuk menulis artikel selanjutnya tentang berbagai fungsi yang ada di OS modern mana pun), kami akan menjelaskan petunjuk langkah demi langkah tentang membuat disk boot dengan program yang sudah dikenal di C. Kami mencoba menulis sedetail mungkin sehingga Anda dapat mengetahui semuanya sendiri.

Jadi, tujuannya: dengan usaha sesedikit mungkin, buat flash drive Anda sendiri yang dapat di-boot, yang hanya mencetak “Hello World” klasik di layar komputer.

Untuk lebih tepatnya, kita perlu "masuk" ke mode terlindungi dengan pengalamatan halaman dan interupsi dinonaktifkan - mode operasi prosesor paling sederhana dengan perilaku yang familiar untuk program konsol sederhana. Cara paling masuk akal untuk mencapai tujuan ini adalah dengan membangun kernel yang mendukung format multiboot dan memuatnya menggunakan yang populer Pemuat boot grub. Alternatif untuk solusi ini adalah dengan menulis volume boot record (VBR) Anda sendiri, yang akan memuat pemuat tertulis Anda sendiri. Bootloader yang layak, minimal, harus dapat bekerja dengan disk, dengan sistem file, dan mengurai gambar elf. Artinya, Anda perlu menulis banyak kode assembly, dan banyak kode dalam C. Singkatnya, lebih mudah menggunakan Grub, yang sudah dapat melakukan semua yang Anda perlukan.

Mari kita mulai dengan fakta bahwa untuk tindakan lebih lanjut Anda memerlukan seperangkat kompiler dan utilitas tertentu. Cara termudah adalah dengan menggunakan beberapa Linux (misalnya, Ubuntu), karena di dalamnya sudah berisi semua yang Anda perlukan untuk membuat flash drive USB yang dapat di-boot. Jika Anda terbiasa bekerja di Windows, Anda dapat mengkonfigurasinya mesin virtual dengan Linux (menggunakan Virtual Box atau VMware Workstation).

Jika Anda menggunakan Linux Ubuntu, maka pertama-tama Anda perlu menginstal beberapa utilitas:
1. Kotoran. Untuk melakukan ini kita akan menggunakan perintah:
sudo apt-get install grub

2. Qemu. Diperlukan untuk membuat semuanya cepat, untuk ini perintahnya serupa:
sudo apt-get install qemu

Sekarang rencana kami terlihat seperti ini:
1. membuat program C yang mencetak string di layar.
2. buat image darinya (kernel.bin) dalam format miniboot sehingga tersedia untuk boot menggunakan GRUB.
3. buat file image boot disk dan format.
4. instal Grub pada gambar ini.
5. salin program yang dibuat (kernel.bin) ke disk.
6. bakar gambar tersebut ke media fisik atau jalankan di qemu.

Dan proses boot sistem:

Agar semuanya berfungsi, Anda perlu membuat beberapa file dan direktori:

Langkah 1. Membuat kode untuk program target (kernel):

Buat file kernel.c, yang berisi kode berikut yang mencetak pesan di layar:

#include "printf.h" #include "screen.h" #include "types.h" void main(void) ( clear_screen(); printf("\n>>> Halo Dunia!\n"); )

Segala sesuatu di sini familier dan sederhana. Penambahan fungsi printf dan clear_screen akan dibahas lebih lanjut. Sementara itu, kita perlu melengkapi kode ini dengan semua yang diperlukan agar dapat dimuat oleh Grub.
Agar kernel berada dalam format multiboot, 8 kilobyte pertama image kernel harus berisi struktur berikut:

Jika semua kondisi yang ditentukan terpenuhi, maka Grub meneruskan pointer ke struktur Informasi multiboot dan nilai 0x1BADB002 masing-masing melalui register %eax dan %ebx. Struktur Informasi multiboot berisi berbagai informasi, termasuk daftar modul yang dimuat dan lokasinya, yang mungkin diperlukan untuk memuat sistem lebih lanjut.
Agar file program berisi tanda tangan yang diperlukan, kami akan membuat file loader.s dengan konten berikut:

Teks .global loader # membuat titik masuk terlihat oleh linker # menyiapkan header Multiboot - lihat dokumen GRUB untuk detailnya .set FLAGS, 0x0 # ini adalah kolom "flag" Multiboot .set MAGIC, 0x1BADB002 # "magic number" memungkinkan bootloader menemukan header .set CHECKSUM, -(MAGIC + FLAGS) # checksum diperlukan .align 4 .long MAGIC .long FLAGS .long CHECKSUM # cadangan ruang tumpukan kernel awal .set STACKSIZE, 0x4000 # yaitu, 16k. .lcomm stack, STACKSIZE # cadangan 16k tumpukan .comm mbd, 4 # kita akan menggunakan ini di kmain .comm magic, 4 # kita akan menggunakan ini di kmain loader: movl $(stack + STACKSIZE), %esp # atur tumpukan movl %eax, magic # Nomor ajaib multiboot movl %ebx, mbd # Struktur data multiboot panggilan utama # panggilan kode C cli hang: hlt # menghentikan mesin jika kernel mengembalikan jmp hang

Mari kita lihat kodenya lebih detail. Kode ini, hampir tidak berubah, diambil dari wiki.osdev.org/Bare_Bones. Karena gcc digunakan untuk kompilasi, sintaks GAS digunakan. Mari kita lihat lebih dekat apa fungsi kode ini.
.teks
Semua kode selanjutnya akan berakhir di bagian teks yang dapat dieksekusi.
.pemuat global
Kami menyatakan simbol pemuat terlihat oleh linker. Hal ini diperlukan karena linker akan menggunakan loader sebagai titik masuk.
.set FLAGS, 0x0 # tetapkan FLAGS = 0x0 .set MAGIC, 0x1BADB002 # tetapkan MAGIC = 0x1BADB002 .set CHECKSUM, -(MAGIC + FLAGS) # tetapkan CHECKSUM = -(MAGIC + FLAGS) .align 4 # sejajarkan data selanjutnya menjadi 4 byte .long MAGIC # letakkan nilai MAGIC pada alamat saat ini .long FLAGS # letakkan nilai FLAGS pada alamat saat ini .long CHECKSUM # letakkan nilai CHECKSUM pada alamat saat ini
Kode ini menghasilkan tanda tangan format Multiboot. Direktif .set menetapkan nilai karakter ke ekspresi di sebelah kanan koma. Direktif .align 4 menyelaraskan konten berikutnya menjadi 4 byte. Direktif .long menyimpan nilai dalam empat byte berikutnya.
.set STACKSIZE, 0x4000 # set STACKSIZE = 0x4000 .lcomm stack, STACKSIZE # cadangan byte STACKSIZE. tumpukan mengacu pada range.comm mbd, 4 # cadangan 4 byte untuk variabel mdb di area UMUM .comm ajaib, 4 # cadangan 4 byte untuk variabel ajaib di area UMUM
Selama proses boot, grub tidak mengkonfigurasi tumpukan, dan hal pertama yang harus dilakukan kernel adalah mengkonfigurasi tumpukan, untuk ini kami mencadangkan 0x4000(16Kb) byte. Direktif .lcomm mencadangkan jumlah byte yang ditentukan setelah koma desimal di bagian .bss. Nama tumpukan hanya akan terlihat di file yang dikompilasi. Direktif .comm melakukan hal yang sama seperti .lcomm, tetapi nama simbol akan dideklarasikan secara global. Artinya dengan menulis baris berikut pada kode C kita sudah bisa menggunakannya.
sihir int eksternal

Dan sekarang bagian terakhir:
loader: movl $(stack + STACKSIZE), %esp # inisialisasi tumpukan movl %eax, magic # tulis %eax ke alamat magic movl %ebx, mbd # tulis %ebx ke alamat mbd panggil main # panggil fungsi utama cli # nonaktifkan interupsi dari hardware hang: hlt # hentikan prosesor hingga terjadi interupsi jmp hang # lompat ke label hang

Instruksi pertama menyimpan nilai di bagian atas tumpukan di register %esp. Karena tumpukan bertambah ke bawah, alamat akhir rentang yang dialokasikan untuk tumpukan ditulis ke %esp. Dua instruksi berikutnya menyimpan dalam rentang 4-byte yang dicadangkan sebelumnya nilai-nilai yang diteruskan Grub dalam register %eax, %ebx. Kemudian fungsi utama dipanggil, yang sudah ditulis dalam C. Jika prosedur ini kembali, prosesor akan melakukan loop.

Langkah 2. Mempersiapkan kode tambahan untuk program (perpustakaan sistem):

Karena seluruh program ditulis dari awal, fungsi printf harus ditulis dari awal. Untuk melakukan ini, Anda perlu menyiapkan beberapa file.
Mari buat folder umum dan sertakan:

Mkdir termasuk mkdir umum

Mari kita buat file common\printf.c, yang akan berisi implementasi fungsi printf yang sudah dikenal. File ini dapat diambil keseluruhannya dari proyek www.bitvisor.org. Jalur ke file di sumber bitvisor: core/printf.c. Dalam file printf.c yang disalin dari bitvisor, untuk digunakan dalam program target, Anda perlu mengganti baris:

#include "initfunc.h" #include "printf.h" #include "putchar.h" #include "spinlock.h"
ke baris:
#include "types.h" #include "stdarg.h" #include "screen.h"

Kemudian, hapus fungsi printf_init_global dan semua referensinya di file ini:

Kekosongan statis printf_init_global (void) ( spinlock_init (&printf_lock); ) INITFUNC("global0", printf_init_global);

Kemudian hapus variabel printf_lock dan semua referensinya di file ini:
spinlock_t statis printf_lock; ... spinlock_lock(&printf_lock); ... spinlock_unlock(&printf_lock);

Fungsi printf menggunakan fungsi putchar, yang juga perlu ditulis. Untuk melakukannya, buat file common\screen.c dengan konten berikut:
#include "types.h" #define GREEN 0x2 #define MAX_COL 80 // Jumlah kolom maksimum #define MAX_ROW 25 // Jumlah baris maksimum #define VRAM_SIZE (MAX_COL*MAX_ROW) // Ukuran layar, singkatnya # mendefinisikan DEF_VRAM_BASE 0xb8000 // Basis default untuk memori video static unsigned char curr_col = 0; static unsigned char curr_row = 0; // Tulis karakter di lokasi layar saat ini #define PUT(c) (((unsigned short *) (DEF_VRAM_BASE)) \ [(baris_kini * MAX_COL) + kolom_kini] = (HIJAU<< 8) | (c)) // Place a character on next screen position static void cons_putc(int c) { switch (c) { case "\t": do { cons_putc(" "); } while ((curr_col % 8) != 0); break; case "\r": curr_col = 0; break; case "\n": curr_row += 1; if (curr_row >= MAX_ROW) (curr_row = 0; ) istirahat; case "\b": if (curr_col > 0) ( curr_col -= 1; PUT(" "); ) break; bawaan: PUT(c); arus_kol += 1; if (curr_col >= MAX_COL) (curr_col = 0; curr_row += 1; if (curr_row >= MAX_ROW) (curr_row = 0; ) ) ); ) void putchar(int c) ( if (c == "\n") cons_putc("\r"); cons_putc(c); ) void clear_screen(void) ( curr_col = 0; curr_row = 0; int i; untuk (saya = 0; saya< VRAM_SIZE; i++) cons_putc(" "); curr_col = 0; curr_row = 0; }

Kode yang ditentukan berisi logika sederhana untuk mencetak karakter ke layar dalam mode teks. Dalam mode ini, dua byte digunakan untuk merekam karakter (satu dengan kode karakter, yang lain dengan atributnya), ditulis langsung ke memori video yang langsung ditampilkan di layar dan dimulai dari alamat 0xB8000. Resolusi layar 80x25 karakter. Karakter langsung dicetak menggunakan makro PUT.
Sekarang hanya beberapa file header yang hilang:
1. File termasuk\screen.h. Mendeklarasikan fungsi putchar, yang digunakan dalam fungsi printf. Isi berkas:
#ifndef _SCREEN_H #define _SCREEN_H batal jelas_layar(batal); batalkan putchar(int c); #berakhir jika

2. File termasuk\printf.h. Mendeklarasikan fungsi printf, yang digunakan di main. Isi berkas:
#ifndef _PRINTF_H #define _PRINTF_H int printf (const char *format, ...); #berakhir jika

3. File termasuk\stdarg.h. Mendeklarasikan fungsi untuk menghitung argumen, yang jumlahnya tidak diketahui sebelumnya. Seluruh file diambil dari proyek www.bitvisor.org. Jalur ke file dalam kode proyek bitvisor: include\core\stdarg.h.
4. File termasuk\types.h. Mendeklarasikan NULL dan size_t. Isi berkas:
#ifndef _TYPES_H #define _TYPES_H #define NULL 0 typedef unsigned int size_t; #berakhir jika
Dengan demikian, folder include dan common berisi kode perpustakaan sistem minimum yang dibutuhkan setiap program.

Langkah 3: Buat skrip untuk linker:

Kami membuat file linker.ld, yang akan digunakan oleh linker untuk menghasilkan file program target (kernel.bin). File tersebut harus berisi yang berikut ini:

ENTRI (pemuat) LMA = 0x00100000; BAGIAN ( . = LMA; .multiboot ALIGN (0x1000) : ( loader.o(.text) ) . teks SEJARAH(0x1000) : ( *(.teks) ) .rodata ALIGN (0x1000) : ( *(.rodata*) ) .data ALIGN (0x1000) : ( *(.data) ) .bss: ( *(UMUM) *( .bss) ) /BUANG/ : ( *(.komentar) ) )

Fungsi bawaan ENTRY() memungkinkan kita mengatur titik masuk untuk kernel kita. Ke alamat inilah grub akan mentransfer kendali setelah memuat kernel. Linker akan menggunakan skrip ini untuk membuat file biner dalam format ELF. File ELF terdiri dari sekumpulan segmen dan bagian. Daftar segmen terdapat pada tabel header Program, daftar bagian terdapat pada tabel header Bagian. Linker beroperasi dengan bagian, pemuat gambar (dalam kasus kami, GRUB) dengan segmen.


Seperti terlihat pada gambar, segmen terdiri dari beberapa bagian. Salah satu bidang yang menjelaskan bagian tersebut adalah alamat maya, di mana bagian tersebut harus ditempatkan pada saat eksekusi. Faktanya, sebuah segmen memiliki 2 bidang yang menjelaskan lokasinya: alamat virtual segmen tersebut dan alamat fisik segmen tersebut. Alamat virtual suatu segmen adalah alamat virtual byte pertama segmen pada saat kode dieksekusi, alamat fisik segmen adalah alamat fisik di mana segmen tersebut harus dimuat. Untuk program aplikasi, alamat ini selalu sama. Grub memuat segmen gambar berdasarkan alamat fisiknya. Karena Grub tidak mengkonfigurasi paging, alamat virtual suatu segmen harus sesuai dengan alamat fisiknya, seperti dalam program kita memori maya Itu juga tidak dapat dikonfigurasi.

BAGIAN
Menunjukkan bagian yang dijelaskan di bawah ini.
. = LMA;
Ekspresi ini memberitahu linker bahwa semua bagian selanjutnya berada setelah alamat LMA.
SEJARAH (0x1000)
Arahan di atas berarti bahwa bagian tersebut disejajarkan pada 0x1000 byte.
.multiboot ALIGN (0x1000) : ( loader.o(.teks) )
Bagian multiboot terpisah, yang mencakup bagian .text dari file loader.o, dibuat untuk memastikan bahwa tanda tangan format multiboot disertakan dalam 8kb pertama dari image kernel.
.bss: ( *(UMUM) *(.bss) )
*(COMMON) adalah area di mana memori dicadangkan oleh instruksi .comm dan .lcomm. Kami menempatkannya di bagian .bss.
/BUANG/ : ( *(.komentar) )
Semua bagian yang ditandai sebagai DISCARD dihapus dari gambar. Dalam hal ini, kami menghapus bagian .comment, yang berisi informasi tentang versi linker.

Sekarang mari kompilasi kode ke dalam file biner menggunakan perintah berikut:
sebagai -o loader.o loader.s gcc -Iinclude -Wall -fno-builtin -nostdinc -nostdlib -o kernel.o -c kernel.c gcc -Iinclude -Wall -fno-builtin -nostdinc -nostdlib -o printf.o -c common/printf.c gcc -Iinclude -Wall -fno-builtin -nostdinc -nostdlib -o screen.o -c common/screen.c ld -T linker.ld -o kernel.bin kernel.o screen.o printf .o pemuat.o
Dengan menggunakan objdump, mari kita lihat seperti apa image kernel setelah ditautkan:
objdump -ph ./kernel.bin


Seperti yang Anda lihat, bagian dalam gambar sama dengan bagian yang kami jelaskan di skrip tautan. Linker membentuk 3 segmen dari bagian yang dijelaskan. Segmen pertama mencakup bagian .multiboot, .text, .rodata dan memiliki alamat virtual dan fisik 0x00100000. Segmen kedua berisi bagian .data dan .bss dan terletak di alamat 0x00104000. Ini berarti Anda siap memuat file ini menggunakan Grub.

Langkah 4: Mempersiapkan bootloader Grub:
Buat folder grub:
grub mkdir

Salin ke folder ini beberapa file Grub yang diperlukan untuk menginstalnya pada image (file berikut ada jika Grub diinstal pada sistem). Untuk melakukan ini, Anda perlu menjalankan perintah berikut:
cp /usr/lib/grub/i386-pc/stage1 ./grub/ cp /usr/lib/grub/i386-pc/stage2 ./grub/ cp /usr/lib/grub/i386-pc/fat_stage1_5 ./grub /

Buat file grub/menu.lst dengan konten berikut:
batas waktu 3 default 0 judul mini_os root (hd0,0) kernel /kernel.bin

Langkah 5. Otomatiskan dan buat image boot:

Untuk mengotomatisasi proses pembangunan kita akan menggunakan utilitas make. Untuk melakukan ini, kita akan membuat makefile yang akan dikompilasi sumber, buat kernel dan buat image boot. Makefile harus memiliki konten berikut:

CC=gcc CFLAGS=-Wall -fno-builtin -nostdinc -nostdlib LD=ld OBJFILES=\loader.o\common/printf.o\common/screen.o\kernel.o image: @echo "Membuat hdd.img. .." @dd if=/dev/zero of=./hdd.img bs=512 count=16065 1>/dev/null 2>&1 @echo "Membuat partisi FAT32 pertama yang dapat di-boot..." @losetup /dev/ loop1 ./hdd.img @(echo c; echo u; echo n; echo p; echo 1; echo ; echo ; echo a; echo 1; echo t; echo c; echo w;) | fdisk /dev/loop1 1>/dev/null 2>&1 || true @echo "Memasang partisi ke /dev/loop2..." @losetup /dev/loop2 ./hdd.img \ --offset `echo \`fdisk -lu /dev/loop1 | sed -n 10p | awk "(cetak $$3)"\`*512 | bc` \ --sizelimit `echo \`fdisk -lu /dev/loop1 | sed -n 10p | awk "(cetak $$4)"\`*512 | bc` @losetup -d /dev/loop1 @echo "Format partisi..." @mkdosfs /dev/loop2 @echo "Salin file kernel dan grub di partisi..." @mkdir -p tempdir @mount /dev/loop2 tempdir @mkdir tempdir/boot @cp -r grub tempdir/boot/ @cp kernel.bin tempdir/ @sleep 1 @umount /dev/loop2 @rm -r tempdir @losetup -d /dev/loop2 @echo "Menginstal GRUB. .." @echo "perangkat (hd0) hdd.img \n \ root (hd0,0) \n \ setup (hd0) \n \ keluar\n" | grub --batch 1>/dev/null @echo "Selesai!" semua: kernel.bin membangun kembali: membersihkan semua .s.o: sebagai -o $@ $< .c.o: $(CC) -Iinclude $(CFLAGS) -o $@ -c $< kernel.bin: $(OBJFILES) $(LD) -T linker.ld -o $@ $^ clean: rm -f $(OBJFILES) hdd.img kernel.bin

File tersebut menyatakan dua tujuan utama: semua - yang mengkompilasi kernel, dan gambar - yang membuat disk boot. Tujuan all, seperti makefile biasa, berisi subtujuan.s.o dan.c.o, yang mengkompilasi file *.s dan *.c menjadi file objek (*.o), serta tujuan untuk menghasilkan kernel.bin, yang memanggil linker dengan skrip yang dibuat sebelumnya. Target ini menjalankan perintah yang sama persis seperti yang ditentukan pada langkah 3.
Yang paling menarik di sini adalah penciptaannya gambar boot hdd.img (gambar target). Mari kita lihat bagaimana hal ini terjadi langkah demi langkah.
dd if=/dev/zero of=./hdd.img bs=512 count=16065 1>/dev/null 2>&1
Tim ini menciptakan gambaran yang dengannya pekerjaan selanjutnya akan dilakukan. Jumlah sektor tidak dipilih secara acak: 16065 = 255 * 63. Secara default, fdsik bekerja dengan disk seolah-olah memiliki geometri CHS, dengan Header (H) = 255, Sektor (S) = 63, dan Silinder ( C) tergantung pada ukuran disk. Dengan demikian, ukuran minimum Ukuran disk yang dapat digunakan oleh utilitas fdsik tanpa mengubah geometri default adalah 512*255*63*1 = 8225280 byte, dengan 512 adalah ukuran sektor dan 1 adalah jumlah silinder.
Selanjutnya, tabel partisi dibuat:
kalah /dev/loop1 ./hdd.img (gema c; gema u; gema n; gema p; gema 1; gema ; gema ; gema a; gema 1; gema t; gema c; gema w;) | fdisk /dev/loop1 1>/dev/null 2>&1 || BENAR
Perintah pertama memasang file hdd.img ke perangkat blok /dev/loop1, sehingga file tersebut dapat diperlakukan sebagai perangkat. Perintah kedua membuat tabel partisi pada perangkat /dev/loop1, yang berisi 1 primer partisi boot disk, menempati seluruh disk, dengan label sistem file FAT32.
Kemudian kita memformat partisi yang dibuat. Untuk melakukan ini, Anda perlu memasangnya sebagai perangkat blok dan memformatnya.
kalah /dev/loop2 ./hdd.img \ --offset `echo \`fdisk -lu /dev/loop1 | sed -n 10p | awk "(cetak $$3)"\`*512 | bc` \ --sizelimit `echo \`fdisk -lu /dev/loop1 | sed -n 10p | awk "(cetak $$4)"\`*512 | bc` kalah -d /dev/loop1
Perintah pertama memasang partisi yang dibuat sebelumnya ke perangkat /dev/loop2. Opsi –offset menentukan alamat awal bagian, dan –sizelimit menentukan alamat akhir bagian. Kedua opsi tersebut diperoleh dengan menggunakan perintah fdisk.
mkdosfs /dev/loop2
Utilitas mkdosfs memformat partisi berkas sistem FAT32.
Untuk membangun kernel secara langsung, perintah yang telah dibahas sebelumnya dalam sintaksis makefile klasik digunakan.
Sekarang mari kita lihat cara menginstal GRUB pada partisi:
mkdir -p tempdir # membuat direktori sementara mount /dev/loop2 tempdir # memasang partisi ke dalam direktori mkdir tempdir/boot # membuat direktori /boot pada partisi cp -r grub tempdir/boot/ # salin folder grub ke / boot cp kernel.bin tempdir / # menyalin kernel ke root partisi sleep 1 # tunggu Ubuntu umount /dev/loop2 # unmount folder sementara rm -r tempdir # hapus folder sementara losttup -d /dev/loop2 # lepaskan partisi
Setelah menjalankan perintah di atas, image akan siap untuk instalasi GRUB. Perintah berikut menginstal GRUB ke dalam MBR dari image disk hdd.img.
echo "perangkat (hd0) hdd.img \n \ root (hd0,0) \n \ setup (hd0) \n \ keluar\n" | grub --batch 1>/dev/null

Semuanya siap untuk diuji!

Langkah 6. Luncurkan:

Untuk mengkompilasi, gunakan perintah:
membuat segalanya
Setelah itu file kernel.bin akan muncul.
Untuk membuat image disk yang dapat di-boot, gunakan perintah:
sudo membuat gambar
Hasilnya, file hdd.img akan muncul.
Sekarang Anda dapat mem-boot dari image disk hdd.img. Anda dapat memeriksanya menggunakan perintah berikut:
qemu -hda hdd.img -m 32
atau:
qemu-system-i386 -hda hdd.img



Untuk memeriksa pada mesin sebenarnya, Anda perlu menambahkan gambar ini ke flash drive dan mem-boot darinya. Misalnya dengan perintah ini:
sudo dd if=./hdd.img of=/dev/sdb

Ringkasnya, kita dapat mengatakan bahwa sebagai hasil dari tindakan yang diambil, diperoleh sekumpulan kode sumber dan skrip yang memungkinkan kita melakukan berbagai eksperimen di bidang pemrograman sistem. Langkah pertama telah diambil untuk menciptakan sistem perangkat lunak, seperti hypervisor dan sistem operasi.

Bagaimana jika Anda perlu menjalankan suatu program tetapi tidak ingin menginstalnya? Nol Instal untuk menyelamatkan!

Miliaran orang di seluruh dunia menggunakan komputer atau laptop di ruang operasi sistem jendela. Biasanya, kami menginstal program, lalu mengambilnya tempat bebas pada disk dan gunakan RAM. Ini memperlambat kecepatan komputer.

Hari ini kami akan memberi tahu Anda bagaimana Anda dapat meningkatkan kinerja komputer Anda dan mengurangi beban memori. Untuk melakukan ini, Anda perlu menjalankannya program yang diperlukan tanpa menginstalnya.

Bagaimana cara menjalankan program tanpa instalasi?

1. Unduh Nol Instal.

Pertama, unduh perangkat lunak Zero Install, yang memungkinkan Anda menjalankan program tanpa harus menginstalnya di komputer Anda.

2. Instal Nol Instal.

Setelah Anda mengunduh Zero Install, klik dua kali pada file tersebut untuk menginstalnya. Lalu lari program baru di komputer Anda.

3. KlikBatu "Katalog".

Setelah Zero Install berjalan di komputer Anda atau laptop Windows, Anda harus membuka tab “Katalog”. Di sini klik tombol “Segarkan daftar” untuk menyegarkan daftar program yang tersedia.

4. Pilih program yang akan diluncurkan.

Perhatikan baik-baik daftar lengkap program yang tersedia. Jika Anda menemukan program yang Anda perlukan, sorot program tersebut dan klik "Jalankan". Beberapa program mungkin memilih peramban Firefox atau Mozilla untuk dijalankan. Tunggu saja hingga perangkat lunak diunduh sepenuhnya dan kemudian Anda dapat menjalankannya di komputer Anda tanpa menginstalnya.


Meringkas

Jika komputer Anda tidak memiliki cukup memori atau daya untuk menjalankan program, Anda dapat menggunakan Zero Install. Saya pikir ini adalah cara terbaik untuk menghindari mengacaukan komputer Anda dengan program yang hanya Anda perlukan untuk sekali pakai.

Selain itu, komputer Anda mungkin tidak memiliki daya yang cukup untuk menjalankan program tertentu, seperti Eclipse IDE, JetBrains, NetBeans, dll. Ini adalah program yang sangat berat untuk pengembang yang menghabiskan banyak RAM.

Zero Install akan membantu Anda menjalankan program ini dan banyak program lainnya tanpa menginstalnya di komputer Anda.