小编Mic*_*tch的帖子

为什么启用/禁用A20线路

我对A20门有疑问.我读了一篇关于它的文章,说这个机制存在解决地址"环绕"的问题,当新的CPU获得32位地址总线而不是旧的20位总线时出现.

在我看来,处理环绕的正确方法是关闭所有位A20-A31,而不仅仅是A20.

为什么只关闭A20位才能解决问题呢?

memory x86 osdev

6
推荐指数
1
解决办法
1260
查看次数

用int 13h读取硬盘驱动器写入扇区

我有一个简单的程序.它必须从硬盘驱动器(而不是mbr)读取第一个扇区,并将其写入0扇区(mbr).但它不起作用.我认为它与错误的DAP有关.谢谢.

    [bits   16]
    [org    0x7c00]

;clear screen
start:
    mov     ax, 0x3
    int     0x10

;reset the hard drive
    xor     ah, ah
    mov     dl, 0x80
    int     0x13
    jnz     error

;read the second sector
    mov     si, DAP
    mov     ah, 0x42
    int     0x13

    mov     si, data
    call    print_string
    jmp     $

DAP:
    db      0x10    ;size of DAP
    db      0x0     ;zero
    db      0x1     ;number of sectors to read
    db      0x0     ;zero
;point to memory
    dw      0x0     ;offset
    dw      0x0     ;segment
    dq      0x1     ;disk address

DAP2:
    db …
Run Code Online (Sandbox Code Playgroud)

x86 assembly bios bootloader bochs

6
推荐指数
2
解决办法
1万
查看次数

英特尔MPX,BNDSTX,BNDLDX

英特尔MPX,在以下文档中描述了新手:https://software.intel.com/sites/default/files/managed/68/8b/319433-019.pdf

我不确定我理解BNDLDX和BNDSTX是如何工作的.以BNDSTX为例.

从文档(第855页):

"BNDSTX用于通过使用两级结构的地址转换将与缓冲区关联的边界和指向该缓冲区的指针的"指针值"存储到绑定表条目中,请参见第9.3.8节.例如,软件有一个存储在BND0中的边界的缓冲区,指向缓冲区的指针在ESI中,以下序列将"指针值"(缓冲区)和边界存储到已配置的绑定表条目中,使用与相关的线性地址的地址转换由基址寄存器和索引寄存器组成的SIB寻址形式的基础:"

MOV ECX, Dword ptr [ESI] ; store the pointer value in the index register ECX
MOV EAX, ESI ; store the pointer in the base register EAX
BNDSTX Dword ptr [EAX+ECX], BND0 ; perform address translation from the linear address of the base EAX and store bounds and pointer value ECX onto a bound table entry.
Run Code Online (Sandbox Code Playgroud)

该示例说明ESI包含一些指针,如果是这样,那么第一条指令mov ecx,dword ptr [esi]通过间接寻址执行一个简单的mov并获取任何esi 指向 ecx 的dword ,这就是我所假设的用"指针值"表示,或者它们是否代表其他东西?这是什么目的,这与BNDSTX执行的地址转换有何关系?

第二条指令似乎足够直观,它只是想将这个指针存储到缓冲区并复制它.然而,为什么这是严格需要也有点奇怪.BND0不包含缓冲区的开头吗?它不是简单地复制下限指针吗?而且,这个"指针值"的用途到底是什么目的还不清楚.

assembly pointers intel

6
推荐指数
1
解决办法
922
查看次数

QDialog - 如何删除最小化按钮

基于 Qt 4.8 的应用程序 - QDialog 问题,最小化按钮

  • Windows 和 Gnome (Linux)

    • 出现模态对话框,右上角有关闭按钮,最小化按钮不存在
    • 每个对话框中的最小化选项都是灰色的。
    • 这是有道理的,因为 QDialog 是模态的 - 如果将其最小化,整个应用程序将被阻止。

但问题来了:

  • 在 KDE (linux) 中,会出现最小化-最大化按钮。

看来这是一个依赖于平台的功能 -

我不太确定该做什么。

有任何想法吗...?(我已经尝试了一些 windowsFlags,但找不到有效的一组。

尝试过:

  • setWindowFlags( Qt::CustomizeWindowHint | Qt::WindowCloseButtonHint );
  • Qt::WindowFlags 标志 = getWindowFlags( ); 标志 |= Qt::WindowMinimizeButtonHint; 设置窗口标志(标志)

--- 但基本问题是为什么 Windows/GNOME 上的行为与 KDE 不同

qt kde qdialog

6
推荐指数
1
解决办法
7890
查看次数

Spring Boot 应用程序不会熬夜

我创建了一个简单的 REST Spring 启动应用程序。我看到它开始,但它立即关闭。日志中没有错误。

下面是代码和日志。

代码:

@Controller
@ComponentScan
@EnableAutoConfiguration 
@RequestMapping("userInfo")
public class UserUpdateService
{
    private java.util.logging.Logger logger = Logger.getLogger("UserUpdateService");

    @RequestMapping(value="/{userId}", method=RequestMethod.GET, produces = "application/xml; charset=utf-8")
    @ResponseBody
    String getUserInfo(@PathVariable String userId)
    {
        String func = "getUserInfo";
        logger.entering("UserUpdateService", func);

        String retval = "";
        return retval;
    }

    @RequestMapping(value="/{userId}", method=RequestMethod.DELETE, produces = "application/xml; charset=utf-8")
    @ResponseBody
    String removeUser(@PathVariable String userId)
    {
        String retval = "";
        String func = "removeUser";

        logger.entering("UserUpdateService", func);
        return retval;
    }

    @RequestMapping(value="/", method=RequestMethod.PUT, produces = "application/xml; charset=utf-8")
    @ResponseBody
    String addUser(@WebParam (name = …
Run Code Online (Sandbox Code Playgroud)

rest spring spring-boot

6
推荐指数
1
解决办法
2039
查看次数

在Spring项目中集成Spring Boot

我有一个使用弹簧靴创建的现有战争项目.如何在具有EJB模块的EAR中打包它?

有没有办法将模型和dao包移动到EJB模块并使用WAR模块注入它?

ear spring spring-boot

6
推荐指数
2
解决办法
8321
查看次数

如何将shellcode反汇编成汇编指令?

是否有一些工具可以将原始十六进制分解为汇编指令?例如:假设我们有\xeb\x1d根据这个在线反汇编程序反汇编成jmp 0x1f。那么有没有一些离线工具?我试过 ndasm 它没有给我正确的输出。

ndisam -b32 foo 给了我:

输出:

00000000  5C                pop esp<br>
00000001  7833              js 0x36<br>
00000003  315C7865          xor [eax+edi*2+0x65],ebx<br>
00000007  620A              bound ecx,[edx]
Run Code Online (Sandbox Code Playgroud)

它应该是 jmp 0x1f。我也试过 objdump 像:

objdump -D -b binary -mi386 -M intel foo

输出:

00000000 <.data>:<br>
   0:   5c                      pop    esp <br>
   1:   78 33                   js     0x36 <br>
   3:   31 5c 78 65             xor    DWORD PTR [eax+edi*2+0x65],ebx<br>
   7:   62 0a                   bound  ecx,QWORD PTR [edx]<br>
Run Code Online (Sandbox Code Playgroud)

所以你能告诉我一些将原始十六进制代码反汇编成汇编语言的工具吗?

我也尝试过 gdb,但我想要更灵活的东西。

x86 assembly disassembly shellcode

6
推荐指数
1
解决办法
8900
查看次数

对_GLOBAL_OFFSET_TABLE_的未定义引用(仅在生成二进制文件时)

这就是问题:
当我用C语言链接我的脚本时,使用ld,当我在ld中生成elf32-i386文件作为输出格式,将它作为OUTPUT_FORMAT()放在ld脚本中时,我没有任何错误,但如果我尝试放入最后一个OUTPUT_FORMAT()"二进制"或尝试输出扩展名为.bin的文件,我得到的错误如下:

kernel.o: In function `k_main':
kernel.c:(.text+0xe): undefined reference to `_GLOBAL_OFFSET_TABLE_'
kernelutils.o: In function `k_clear_screen':
kernelutils.c:(.text+0xc): undefined reference to `_GLOBAL_OFFSET_TABLE_'
kernelutils.o: In function `k_clear_screen_front':
kernelutils.c:(.text+0x56): undefined reference to `_GLOBAL_OFFSET_TABLE_'
kernelutils.o: In function `k_printf':
kernelutils.c:(.text+0xa0): undefined reference to `_GLOBAL_OFFSET_TABLE_'
kernelutils.o: In function `k_sleep_3sec':
kernelutils.c:(.text+0x152): undefined reference to `_GLOBAL_OFFSET_TABLE_'
kernelmalloc.o:kernelmalloc.c:(.text+0xc): more undefined references to `_GLOBAL_OFFSET_TABLE_' follow
Run Code Online (Sandbox Code Playgroud)

这不仅发生在编译特定脚本时,所有尝试使用ld链接的脚本,或gcc,因为这会调用ld,在尝试获取带扩展名为.bin的二进制文件时死掉.
当显示其中一个可执行文件的符号(上面输出中的kernel.o)时,我看到符号_GLOBAL_OFFSET_TABLE_未定义,最可怕的部分,上面错误输出中返回错误的所有函数都删除了它们的符号,这是nm输出:

cristian@mymethodman:~/Desktop/kernel/0.0.3/Archivos$ nm kernel.o
         U _GLOBAL_OFFSET_TABLE_
         U k_clear_screen
         U k_clear_screen_front
00000000 T k_main
         U k_malloc
         U k_printf
         U k_sleep_3sec
00000000 T __x86.get_pc_thunk.bx
Run Code Online (Sandbox Code Playgroud)

我怎么能解决这个问题?我将保留下面的链接器脚本以确保它不是.ld文件的问题,同时具有"获取elf"和"获取二进制"版本.提前致谢!

Ld脚本:
获取二进制文件: …

linker gcc linker-errors ld osdev

6
推荐指数
1
解决办法
3262
查看次数

在Spring Boot中添加.crt以启用SSL

我以前从未做过,而且大多数教程都没有提到如何处理.crt文件。

我从GoDaddy购买了SSL证书,并在下载时选择了Tomcat作为平台。压缩文件包含3个文件:

dea08asdjakjawl.crt  
gd_bundle-g1-g1.crt  
gdig.crt.pem  
Run Code Online (Sandbox Code Playgroud)

我在CentOS7服务器上有一个正在运行的Spring Boot应用程序(在具有嵌入式Tomcat的端口80上)。(服务器在Digital Ocean上运行,它具有分配的域,并且可以使用简单的http)

我想将其切换到https://something.com

所有教程都建议我为此必须具有.jks或.p12文件,但无法将.crt文件转换为该文件。此外,我不确定2 .crt文件中的哪个应转换为.jks / .p12。

我已将此添加到我的application.yaml中,但没有帮助:

server:    
  port: 443  
  ssl:  
    enabled: true  
    key-alias: server  
    key-store: "cert.crt"  
    key-store-password: "***"  
Run Code Online (Sandbox Code Playgroud)

如何使用此证书将正在运行的Spring Boot项目更改为接受HTTPS查询?

ssl https spring tomcat spring-boot

6
推荐指数
2
解决办法
9401
查看次数

赋值指令不为emu8086中的符号赋值

为什么以下代码不X使用emu8086中的Assignment Directive(=)为符号赋值:

.model small
.data

        X = 8

.code
.startup

       mov ax, @data
       mov ds, ax

       mov bx, X

       X = 6      

       mov bx, X 

       mov ah, 02h
       mov dx, bx   
       add dx, 48
       int 21h     ; It should display 6 but instead it display 8. 

       mov ah, 04ch
       int 21h

end
Run Code Online (Sandbox Code Playgroud)

assembly x86-16 emu8086

6
推荐指数
1
解决办法
126
查看次数