有时我在C++中看到不同的数组访问样式,并认为它可能与程序集寻址模式有关:
C++:
int * aa=new int[2];
0[aa]=15; //a little different than aa[0]
1[aa]=15;
aa[0]=15;
aa[1]=15;
printf("%d %d \n",aa[0],aa[1]);
Run Code Online (Sandbox Code Playgroud)
部件:
__asm
{
mov aa[0],ebx
mov aa[1],eax
mov 0[aa],ebx
mov 1[aa],eax
}
Run Code Online (Sandbox Code Playgroud)
这个C++数组访问符号是标准吗?如果是,它是从汇编寻址模式派生的吗?
当我尝试时[aa]1=5;,编译器给出
"左操作数必须是l值".
//当我尝试指针算术时,
*(aa + 1)= 0 //没有错误
*(aa + 0)= 0 //没有错误:)
对于运算符[]重载,此规则是否相同?
MSVC++ 2010
谢谢.
我正在开发一个汇编程序,它将接受用户输入并根据变量进行检查,但由于某种原因,此代码将始终说密码输入不正确.请注意,我没有包含一些调用的代码,但我确信它们确实有效,因为我在许多其他示例中都完美地使用了它们.基本上,我需要知道为什么这会拒绝认识我的输入和字符串匹配.任何帮助是极大的赞赏.
start:
mov ax, login_input
mov bx, login_message
call os_input_dialog ;opens a dialog box that shows the string login_message,
;then it takes user input andd stores it in ax
mov si, login_input
mov di, password
cmp si, di ;compares input against the password
je app_selector ;if equal, jump to the next part of code
jmp start ;otherwise try again
login_input times 12 db 0
login_message db 'Password: '
password db 'root'
Run Code Online (Sandbox Code Playgroud) 我正在尝试在这样的ARM模板配置中创建动态DependOn属性
"type": "Microsoft.Resources/deployments",
"apiVersion": "2017-05-10",
"dependsOn": [],
Run Code Online (Sandbox Code Playgroud)
我确实有需要dependOn的场景.所以我正在创建一个变量,如果资源需要这种类型的数据作为依赖项,它会动态地将数据添加到数组中.
例如,如果我在参数部分中设置参数以将可用性设置为true,则我的虚拟机可能依赖于可用性集.
到目前为止,唯一的方法是根据真/假答案调用动态变量(数组),如下所示:
变量(CONCAT( 'Dependon_AS _',参数( 'IncludeAS'))
有没有更好的方法来处理这个?
如何在进程的可执行存储器中区分组装"调用"指令(E8 [地址])与其他E8字节(例如,在另一条指令中间的那个)的操作码?(从C语言的角度来看,最好)
是否足以验证E8字节之后的四个字节是否引用有效地址,然后验证该区域(即被调用函数的开始)是否以对应于操作码"push ebp"和"mov ebp"的字节开头,esp"(大多数功能都使用这个序幕)?或者是否有更好的选择,例如检查从入口点到出口点的每个操作码?
顺便说一句,我对这个主题几乎没有经验,所以任何信息都值得赞赏.
谢谢!
为什么32位C将所有函数参数直接推送到堆栈上,而64位C将前6个参数放入寄存器而其余的放在堆栈中?
所以32位堆栈看起来像:
...
arg2
arg1
return address
old %rbp
Run Code Online (Sandbox Code Playgroud)
虽然64位堆栈看起来像:
...
arg8
arg7
return address
old %rbp
arg6
arg5
arg4
arg3
arg2
arg1
Run Code Online (Sandbox Code Playgroud)
那么为什么64位C会这样做呢?将所有内容都推送到堆栈而不是将前6个参数放在寄存器中以便将它们移动到函数序言中的堆栈中是不是更容易?
我们使用以下模板通过 ARM 模板部署多个资源组:
"parameters": {
"ResourceGroups": {
"type": "array",
"defaultValue": [
"RG1",
"RG2",
"RG3"
]
}
"resources": [
{
"type": "Microsoft.Resources/resourceGroups",
"apiVersion": "2018-05-01",
"location": "[parameters('rgLocation')]",
"name": "[parameters('ResourceGroups')[copyIndex()])]",
"copy": {
"name": "resourcegroupcopy",
"count": "[length(parameters('ResourceGroups'))]",
"mode": "serial"
},
"properties": {},
"tags": {}
Run Code Online (Sandbox Code Playgroud)
我们还希望在这些资源组上编写 Azure 标记脚本。然而,问题是,并非我们创建的所有资源组都需要相同的标签。它们因资源组而异。
例如:RG1 需要 Tag1,RG2 需要 Tag2,等等。
我如何将其放入我的脚本中?
任何人都可以指出我正确的方向吗?
谢谢!
所以我已经有了dockerhub可以使用的图像,因为我已经在服务器上设置了一个 kubernetes 集群。我的下一步是使用 docker swarm 实现类似的功能。我真的不知道如何开始,所以我在这里问。
kubernetes 集群在 a 上运行,bare metal ubuntu VPS server如下所示:
我的问题是:
如何在
bare metal ubuntu VPS. 我没有发现太多,是否有任何需要注意的重大更改(类似于metalLBkubernetes 集群中的更改)?
使用arm-none-eabi-gcc工具链。
在使用-nostdlib链接器中的选项进行ARM 开发期间,我可以使用 unsigned int、int 等。但是uint8_t我必须使用 --specs=nano.specs,因为它们在 newlib 标准库中。
那么是如何unsigned int解决的呢?
我一直在使用 IDE 进行 ARM 开发。因此不知道底层的东西是如何工作的。当我遇到这些疑问时,我正在学习一些裸机教程。
谢谢你。
我正在尝试编写一个引导扇区,将字符串打印到屏幕上。我正在使用 nasm。我的教程说,当调用 int 10h 时,您已将值 07h 放入 bl 中。这是文本的颜色。我尝试将 bl 的值更改为 08h 但它没有打印任何内容!所以我尝试将其更改为06h,但仍然没有任何结果!是否可以使用 bl 中的值更改颜色?如果是这样,什么值与什么颜色相匹配?
如果我更改 ah 中的值,int 10h 会执行其他操作(例如将文本扫描到 al 中)吗?