Tôi muốn tăng ngoại lệ trong khối khối as64.Làm cách nào để tăng ngoại lệ trong khối asm?
Hãy giả sử tôi có một chức năng như vậy:
function Example(Values: array of integer): integer;
asm
or rcx,rcx
jz @error
....
Tôi biết tôi chỉ có thể đọc các con trỏ và có được một AV, tuy nhiên tôi muốn nêu lên một lỗi mô tả nhiều hơn.
tôi có thể thực hiện một chức năng bổ sung và gọi đó là một:
asm
or rcx,rcx
jz @error
....
@error:
mov ecx, 1
mov rdx, ErrorString
jmp RaiseError
....
function RaiseError(code: integer; const Msg: string);
begin
case code of
1: raise EEmptyArrayError.Create(Msg);
Tuy nhiên các lỗi sau đó sẽ xảy ra bên ngoài hàm trong đó là được gây ra. Làm cách nào để ngoại lệ (dường như) bắt nguồn từ bên trong hàm Example
.
Lưu ý rằng đây là X64, vì vậy tất cả các câu trả lời SEH áp dụng cho X86 đều không tốt vì X64 sử dụng VEH.
Tôi nghĩ rằng nó vẫn là SEH trong x64. Và chỉ cần viết một số Pascal và xem những gì trình biên dịch phát ra để làm việc nó ra. –
Vì không ai khác sẽ hỏi, nếu mã là đủ cao mà bạn muốn nó để nâng cao ngoại lệ, tại sao bạn viết nó trong hội đồng ở nơi đầu tiên? – alcalde
Bởi vì nó cần hướng dẫn SSE, và tôi không có SSE-intrinsics. – Johan