我对A20门有疑问.我读了一篇关于它的文章,说这个机制存在解决地址"环绕"的问题,当新的CPU获得32位地址总线而不是旧的20位总线时出现.
在我看来,处理环绕的正确方法是关闭所有位A20-A31,而不仅仅是A20.
为什么只关闭A20位才能解决问题呢?
我有一个简单的程序.它必须从硬盘驱动器(而不是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) 英特尔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不包含缓冲区的开头吗?它不是简单地复制下限指针吗?而且,这个"指针值"的用途到底是什么目的还不清楚.
基于 Qt 4.8 的应用程序 - QDialog 问题,最小化按钮
Windows 和 Gnome (Linux)
但问题来了:
看来这是一个依赖于平台的功能 -
我不太确定该做什么。
有任何想法吗...?(我已经尝试了一些 windowsFlags,但找不到有效的一组。
尝试过:
--- 但基本问题是为什么 Windows/GNOME 上的行为与 KDE 不同
我创建了一个简单的 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) 我有一个使用弹簧靴创建的现有战争项目.如何在具有EJB模块的EAR中打包它?
有没有办法将模型和dao包移动到EJB模块并使用WAR模块注入它?
是否有一些工具可以将原始十六进制分解为汇编指令?例如:假设我们有\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,但我想要更灵活的东西。
这就是问题:
当我用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脚本:
获取二进制文件: …
我以前从未做过,而且大多数教程都没有提到如何处理.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查询?
为什么以下代码不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)