我正在尝试调试我在Ubuntu中编写的一个小.asm文件.然而,我遇到了一个问题,我的符号表没有被加载,正在寻找一些帮助.
我正在编译我的程序如下.
nasm -f elf -g -F dwarf bs.asm
gcc -m32 -g bs.o -o bs
Run Code Online (Sandbox Code Playgroud)
我跑的时候产生可执行的bs
gdb bs
Run Code Online (Sandbox Code Playgroud)
我收到一条消息说没有调试符号,当我尝试设置一个断点时
b main
Run Code Online (Sandbox Code Playgroud)
它说功能没有定义,即使它在文件中,我可以使用./bs运行它
我阅读了一些帖子,建议在组装时添加-F矮人,但如果有人有任何见解这没有帮助我会非常感谢你的输入.
这里是一个完整的(我认为)NASM 指令列表的链接,我认为它也涵盖了 Intel 处理器的 x64 位指令集。
然而,我希望在某个地方有一个完整的说明列表,仅此而已,而不需要对每个说明进行冗长的解释。
这样的事情存在吗?这对于学习命令(你可以猜出它们的大部分含义,然后用谷歌搜索你猜不到的那些),当你记不住命令时提高你的记忆力,并扫描合适的命令来满足你的要求,这将很有用。
有人可以解释图中标记的元素之间的区别吗?我认为这只取决于我们想要连接的接口数量.我对吗?
我有一个第三方程序集,我想Internal在我的新C#项目中使用它的类.可能吗?
真的很感激任何一个例子
在此之前有一些上下文:
假设我正在实施一个 dApp,我想减少用户调用相关智能合约的次数。为了做到这一点,所有用户的操作都是在客户端堆叠起来的。最终,用户将不得不将他们的行为提交给智能合约,以更新他们在链上的数据。
智能合约将所有用户操作的队列作为参数,并对其进行迭代,主要进行一些检查和更新。有点像这样:
function verifyUsersActions(Queue actions) public
{
while(actions.length != 0)
{
Action currentAction = actions.pop();
/* tests on currentAction, update datas, etc */
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是:“actions”对象的大小如何影响gas成本?在 "actions.length = 2" 和 "actions.length = 3" 之间,gas 的增量是多少?
我仍然对“内存”和“存储”变量感到困惑,不知道函数调用参数属于哪个类别。
内容
1.简介
这本身不是一个问题(虽然底部有一个)但是一个HelloWorld应用程序供StackOverflow上的人们试验.
当我第一次尝试在MASM中编程时,我试图找到一个使用WIN32 API调用的工作HelloWorld应用程序(因此不链接到C库)但找不到(在MASM语法中).所以现在我已经有了一些经验,我已经为其他人想要学习装配来摆弄.
2.代码
.386 ; 386 Processor Instruction Set
.model flat,stdcall ; Flat memory model and stdcall method
option casemap:none ; Case Sensitive
;Libaries and Include files used in this project
; Windows.inc defines alias (such as NULL and STD_OUTPUT_HANDLE in this code
include \masm32\include\windows.inc
; Functions that we use (GetStdHandle, WriteConsole, and ExitProcess)
; Listing of all available functions in kernel32.lib
include \masm32\include\kernel32.inc
; Actuall byte code available of the functions …Run Code Online (Sandbox Code Playgroud) 我正在使用nasm编译器将我的代码编译成目标文件,然后调用gcc的链接器来链接该目标文件以创建最终的可执行文件.这意味着我可以访问C的运行时库.
我需要进行动态内存分配,所以我按如下方式调用malloc
push 20 ;push amount of bytes malloc should allocate
call _malloc ;call malloc
add esp,4 ;undo push
Run Code Online (Sandbox Code Playgroud)
分配的内存地址在eax寄存器中返回,但是如何使用地址用值初始化该位置?
我的程序的目的是让用户指定他们想要输入多少个数字,然后为每个数字动态创建空间.理想情况下,我希望创建一个匹配用户指定的确切大小的数组,并能够遍历此数组.
我有以下情况.
Data.Data.Data作为输入.诀窍是,所有这些程序集都是插件并动态加载.当然,F1和F2都引用D,但在运行时,所有三个都由主机应用程序加载.
现在如果有人用更新的版本替换D二进制文件会有什么变化呢?
我写了一个测试应用程序,它做了类似的事情,结果如下:
如果.NET跟踪接口调用,我很好.那是因为访问库中未更改的部分只会起作用,如果该部分发生变化,我只会告诉我一个例外.因此它将工作(在接口级别上)或不工作 - 没有未定义的行为.
我的问题:
我的masm源文件如下:
qq.asm
assume cs:codesegment
codesegment segment
mov ax, 0ffffh
mov ds, ax
mov al, 00ffh
mov bx, 0006h
mov [bx], al
mov al, [0006]
mov ah, 0
mov dx, 0
mov cx, 3
s: add dx, ax
loop s
mov ax, 4c00h
int 21h
codesegment ends
end
Run Code Online (Sandbox Code Playgroud)
我使用masm程序生成一个名为qq.exe的.exe文件.当我使用debug qq.exe -u时,教师如下图所示:

我混淆了我的qq.asm中的"mov al,[0006]"指导员在qq.exe中转向"mov AL,06".任何帮助将是欣赏.
我正在使用Visual Studio 2013 Ultimate在MASM中编写汇编语言(x86).我试图使用数组来计算使用数组的n个元素的Fibonacci序列.换句话说,我试图去一个数组元素,获取它之前的两个元素,添加它们,并将结果存储在另一个数组中.
我无法设置索引寄存器以使其工作.
我的程序设置如下:
TITLE fibonacci.asm
INCLUDE Irvine32.inc
.data
fibInitial BYTE 0, 1, 2, 3, 4, 5, 6
fibComputed BYTE 5 DUP(0)
.code
main PROC
MOVZX si, fibInitial
MOVZX di, fibComputed
MOV cl, LENGTHOF fibInitial
L1:
MOV ax, [si - 1]
MOV dx, [si - 2]
MOV bp, ax + dx
MOV dl, TYPE fibInitial
MOVZX si, dl
MOV [edi], bp
MOV dh, TYPE fibComputed
MOVZX di, dl
loop L1
exit
main ENDP
END main
Run Code Online (Sandbox Code Playgroud)
我无法编译这个,因为该行的错误消息"错误A2031:必须是索引或基址寄存器" MOV ebp, …