任何帮助都是适用的,我无法坚持多日:(。
我有一组链表。 例如:0,0,0,0,0 或1,1,1,1,1 或-10,-5,0,5,10
我可以访问链表的第一个元素! 第一个是堆栈,但第二个不在堆栈内存中。
这是我访问链表的第一个值元素的代码
__declspec(naked) int valueLink(struct Node *head) {
__asm{
PUSH EBX
MOV EBX, [ESP+8] //get the address of the first element of linked list on the stack
MOV EAX, [EBX] // move the value to EAX
POP EBX
ret
}
}
我会得到正确的输出,如:
该列表包含-1,-1,-1,-1,-1,正和为0。 你的结果是-1。
该列表包含1,1,1,1,1,正数为5。 你的结果是1
该列表包含-10,-5,0,5,10,正数为15。 你的结果是-10
但现在我想访问链表的第二个值,我修改了代码 - >
__declspec(naked) int valueLink(struct Node *head) {
__asm{
PUSH EBX
MOV EBX, [ESP+8] //get the address of the first element of linked list on the stack
MOV EAX, [EBX+4] // move the second value to EAX
POP EBX
ret
}
}
我会得到错误的价值!请帮忙?!?!
该列表包含-1,-1,-1,-1,-1,正和为0。 你的结果是4760640
该列表包含1,1,1,1,1,正数为5。 你的结果是4760920
该列表包含-10,-5,0,5,10,正数为15。 你的结果是4769096
答案 0 :(得分:0)
我没有看到示例中定义的链接列表中的节点结构。假设名为node的结构定义为成员 next 和 value ,那么节点的语法以及从ebx指向的节点添加值为:
node struct
next dd ?
value dd ?
node ends
; ...
add eax,node.value[ebx]
; ...