new qemu QEMU_OPTION_d

./aarch64-softmmu/qemu-system-aarch64 -machine virt -cpu cortex-a57 -m 1024M -kernel ./vmlinux -nographic -d out_asm,in_asm,op

PROLOGUE: [size=45]
0x7f608c000000:  push   %rbp   #* 55
0x7f608c000001:  push   %rbx   #* 53
0x7f608c000002:  push   %r12   #* 41 54
0x7f608c000004:  push   %r13   #* 41 55
0x7f608c000006:  push   %r14   #* 41 56
0x7f608c000008:  push   %r15   #* 41 57
0x7f608c00000a:  mov    %rdi,%rbp   #* 48 8b ef
0x7f608c00000d:  add    $0xfffffffffffffb78,%rsp   #* 48 81 c4 78 fb ff ff
0x7f608c000014:  jmpq   *%rsi   #* ff e6
0x7f608c000016:  xor    %eax,%eax   #* 33 c0
0x7f608c000018:  add    $0x488,%rsp   #* 48 81 c4 88 04 00 00
0x7f608c00001f:  emms      #* c5 f8 77
0x7f608c000022:  pop    %r15   #* 41 5f
0x7f608c000024:  pop    %r14   #* 41 5e
0x7f608c000026:  pop    %r13   #* 41 5d
0x7f608c000028:  pop    %r12   #* 41 5c
0x7f608c00002a:  pop    %rbx   #* 5b
0x7f608c00002b:  pop    %rbp   #* 5d
0x7f608c00002c:  retq      #* c3

              Block Name    PSize              Offset               Used              Total
           mach-virt.ram    4 KiB  0x0000000008000000 0x0000000040000000 0x0000000040000000
             virt.flash0    4 KiB  0x0000000000000000 0x0000000004000000 0x0000000004000000
             virt.flash1    4 KiB  0x0000000004000000 0x0000000004000000 0x0000000004000000
    /rom@etc/acpi/tables    4 KiB  0x0000000048040000 0x0000000000005000 0x0000000000200000
0000:00:01.0/virtio-net-pci.rom    4 KiB  0x0000000048000000 0x0000000000040000 0x0000000000040000
   /rom@etc/table-loader    4 KiB  0x0000000048240000 0x0000000000001000 0x0000000000001000
      /rom@etc/acpi/rsdp    4 KiB  0x0000000048280000 0x0000000000001000 0x0000000000001000
----------------
IN:
0x0000000000100000:  d53b4220      mrs x0, (unknown)
0x0000000000100004:  b27a0c00      orr x0, x0, #0x3c0
0x0000000000100008:  d51b4220      msr (unknown), x0

OP:
 ld_i32 tmp0,env,$0xfffffffffffffff0
 movi_i32 tmp1,$0x0
 brcond_i32 tmp0,tmp1,lt,$L0

 ---- 0000000000100000 0000000000000000 0000000000000000
 movi_i64 pc,$0x100000
 movi_i64 tmp2,$0x563e09622f50
 movi_i32 tmp0,$0x6232d005
 movi_i32 tmp1,$0x1
 call access_check_cp_reg,$0x0,$0,env,tmp2,tmp0,tmp1
 ld_i64 x0,env,$0x230

 ---- 0000000000100004 0000000000000000 0000000000000000
 movi_i64 tmp2,$0x3c0
 or_i64 x0,x0,tmp2

 ---- 0000000000100008 0000000000000000 0000000000000000
 movi_i64 pc,$0x100008
 movi_i64 tmp2,$0x563e09622f50
 movi_i32 tmp0,$0x6232d004
 movi_i32 tmp1,$0x0
 call access_check_cp_reg,$0x0,$0,env,tmp2,tmp0,tmp1
 movi_i64 tmp2,$0x563e09622f50
 call set_cp_reg64,$0x0,$0,env,tmp2,x0
 movi_i32 tmp0,$0x1
 call rebuild_hflags_a64,$0x1,$0,env,tmp0
 movi_i64 pc,$0x10000c
 exit_tb $0x0
 set_label $L0
 exit_tb $0x7f608c000043

OUT: [size=200]
0x7f608c000100:  mov    -0x10(%rbp),%ebx   #* 8b 5d f0
0x7f608c000103:  test   %ebx,%ebx   #* 85 db
0x7f608c000105:  jl     0x7f608c00019f   #* 0f 8c 94 00 00 00

0x7f608c00010b:  movq   $0x100000,0x140(%rbp)   #* 48 c7 85 40 01 00 00 00 00 10 00

0x7f608c000116:  mov    %rbp,%rdi   #* 48 8b fd
0x7f608c000119:  mov    $0x563e09622f50,%rsi   #* 48 be 50 2f 62 09 3e 56 00 00
0x7f608c000123:  mov    $0x6232d005,%edx   #* ba 05 d0 32 62
0x7f608c000128:  mov    $0x1,%ecx   #* b9 01 00 00 00
0x7f608c00012d:  callq  *0x8d(%rip)        # 0x7f608c0001c0   #* ff 15 8d 00 00 00
0x7f608c000133:  mov    0x230(%rbp),%rbx   #* 48 8b 9d 30 02 00 00
0x7f608c00013a:  or     $0x3c0,%rbx   #* 48 81 cb c0 03 00 00
0x7f608c000141:  mov    %rbx,0x40(%rbp)   #* 48 89 5d 40
0x7f608c000145:  movq   $0x100008,0x140(%rbp)   #* 48 c7 85 40 01 00 00 08 00 10 00
0x7f608c000150:  mov    %rbp,%rdi   #* 48 8b fd
0x7f608c000153:  mov    $0x563e09622f50,%rsi   #* 48 be 50 2f 62 09 3e 56 00 00
0x7f608c00015d:  mov    $0x6232d004,%edx   #* ba 04 d0 32 62
0x7f608c000162:  xor    %ecx,%ecx   #* 33 c9
0x7f608c000164:  callq  *0x56(%rip)        # 0x7f608c0001c0   #* ff 15 56 00 00 00
0x7f608c00016a:  mov    %rbp,%rdi   #* 48 8b fd
0x7f608c00016d:  mov    $0x563e09622f50,%rsi   #* 48 be 50 2f 62 09 3e 56 00 00
0x7f608c000177:  mov    0x40(%rbp),%rdx   #* 48 8b 55 40
0x7f608c00017b:  callq  *0x37(%rip)        # 0x7f608c0001b8   #* ff 15 37 00 00 00
0x7f608c000181:  mov    %rbp,%rdi   #* 48 8b fd
0x7f608c000184:  mov    $0x1,%esi   #* be 01 00 00 00
0x7f608c000189:  callq  *0x21(%rip)        # 0x7f608c0001b0   #* ff 15 21 00 00 00
0x7f608c00018f:  movq   $0x10000c,0x140(%rbp)   #* 48 c7 85 40 01 00 00 0c 00 10 00
0x7f608c00019a:  jmpq   0x7f608c000016   #* e9 77 fe ff ff
0x7f608c00019f:  lea    -0x163(%rip),%rax        # 0x7f608c000043   #* 48 8d 05 9d fe ff ff
0x7f608c0001a6:  jmpq   0x7f608c000018   #* e9 6d fe ff ff
0x7f608c0001ab:  nop       #* 90
0x7f608c0001ac:  nop       #* 90
0x7f608c0001ad:  nop       #* 90
0x7f608c0001ae:  nop       #* 90
0x7f608c0001af:  nop       #* 90
0x7f608c0001b0:  .quad  0x0000563e077c4299
0x7f608c0001b8:  .quad  0x0000563e07829475
0x7f608c0001c0:  .quad  0x0000563e0782915f

----------------
IN:
0x000000000010000c:  58000121      ldr x1, pc+36 (addr 0x100030)
0x0000000000100010:  9100003f  

以下是一个简单的 QEMU GTK GUI 应用程序的示例代码: ```c #include <gtk/gtk.h> #include <glib.h> #include <stdlib.h> #include <stdio.h> #include <string.h> #include "qemu/qemu.h" #include "qemu/qemu-option.h" GtkWidget *window; GtkWidget *start_button; GtkWidget *stop_button; GtkWidget *console_text; QEMUOption option; static void on_start_button_clicked(GtkWidget *widget, gpointer data) { char *cmd = g_strdup_printf("qemu-system-%s -hda %s", option.arch, option.disk_image); FILE *fp = popen(cmd, "r"); if (fp == NULL) { perror("popen failed"); return; } char buf[1024]; while (fgets(buf, sizeof(buf), fp) != NULL) { gtk_text_buffer_insert_at_cursor(gtk_text_view_get_buffer(GTK_TEXT_VIEW(console_text)), buf, strlen(buf)); } pclose(fp); } static void on_stop_button_clicked(GtkWidget *widget, gpointer data) { // TODO: Stop the QEMU process } static void on_window_destroy(GtkWidget *widget, gpointer data) { gtk_main_quit(); } int main(int argc, char *argv[]) { gtk_init(&argc, &argv); // Initialize the QEMU option option.arch = "x86_64"; option.disk_image = "/path/to/disk_image.img"; // Create the main window window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(window), "QEMU GUI"); gtk_window_set_default_size(GTK_WINDOW(window), 640, 480); g_signal_connect(window, "destroy", G_CALLBACK(on_window_destroy), NULL); // Create the start button start_button = gtk_button_new_with_label("Start QEMU"); g_signal_connect(start_button, "clicked", G_CALLBACK(on_start_button_clicked), NULL); // Create the stop button stop_button = gtk_button_new_with_label("Stop QEMU"); g_signal_connect(stop_button, "clicked", G_CALLBACK(on_stop_button_clicked), NULL); // Create the console text view console_text = gtk_text_view_new(); gtk_text_view_set_editable(GTK_TEXT_VIEW(console_text), FALSE); gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(console_text), GTK_WRAP_WORD_CHAR); // Create a vertical box layout GtkWidget *vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 5); gtk_container_add(GTK_CONTAINER(window), vbox); // Add the start button to the layout gtk_box_pack_start(GTK_BOX(vbox), start_button, FALSE, FALSE, 0); // Add the stop button to the layout gtk_box_pack_start(GTK_BOX(vbox), stop_button, FALSE, FALSE, 0); // Add the console text view to the layout GtkWidget *scroll = gtk_scrolled_window_new(NULL, NULL); gtk_container_add(GTK_CONTAINER(scroll), console_text); gtk_box_pack_start(GTK_BOX(vbox), scroll, TRUE, TRUE, 0); // Show all widgets gtk_widget_show_all(window); // Enter the GTK main loop gtk_main(); return 0; } ``` 该示例代码仅包含了启动和停止 QEMU 的基本逻辑,并没有对 QEMU 进行更高级的配置和控制。你可以根据需要修改代码,并添加其他功能来完善你的 QEMU GTK GUI 应用程序。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值